pandaConfig = {
    "name": "Endless Lake",
    "version": "1.0.1",
    "system": {
        "width": 506,
        "height": 900,
        "scaleToFit": true,
        "rotateScreen": true,
        "resizeToFill": true,
        "webGL": true,
        "center": true,
        "rotateImg": "rotate.jpg",
        "rotateMsg": "",
        "transparent": false
    }
};
var game = {
    version: "1.13.2",
    config: "undefined" != typeof pandaConfig ? pandaConfig: {},
    coreModules: ["engine.analytics", "engine.audio", "engine.camera", "engine.debug", "engine.keyboard", "engine.loader", "engine.particle", "engine.geometry", "engine.physics", "engine.pixi", "engine.pool", "engine.renderer", "engine.scene", "engine.storage", "engine.system", "engine.timer", "engine.tween"],
    scale: 1,
    scene: null,
    debug: null,
    system: null,
    audio: null,
    pool: null,
    storage: null,
    keyboard: null,
    device: {},
    paths: {},
    plugins: {},
    json: {},
    modules: {},
    nocache: "",
    waitForLoad: 0,
    DOMLoaded: !1,
    gameLoopId: 1,
    gameLoops: {},
    moduleQueue: [],
    assetQueue: [],
    audioQueue: [],
    getJSON: function(t) {
        return this.json[this.paths[t]]
    },
    copy: function(t) {
        var e, i, s;
        if (!t || "object" != typeof t || t instanceof HTMLElement || t instanceof this.Class || this.Container && t instanceof this.Container) return t;
        if (t instanceof Array) {
            for (i = [], s = 0, e = t.length; e > s; s++) i[s] = this.copy(t[s]);
            return i
        }
        i = {};
        for (s in t) i[s] = this.copy(t[s]);
        return i
    },
    merge: function(t, e) {
        for (var i in e) {
            var s = e[i];
            "object" != typeof s || s instanceof HTMLElement || s instanceof this.Class || s instanceof this.Container ? t[i] = s: (t[i] && "object" == typeof t[i] || (t[i] = s instanceof Array ? [] : {}), this.merge(t[i], s))
        }
        return t
    },
    ksort: function(t, e) {
        if (!t || "object" != typeof t) return ! 1;
        var i, s = [],
        a = {};
        for (i in t) s.push(i);
        for (s.sort(e), i = 0; i < s.length; i++) a[s[i]] = t[s[i]];
        return a
    },
    setVendorAttribute: function(t, e, i) {
        var s = e.ucfirst();
        t[e] = t["ms" + s] = t["moz" + s] = t["webkit" + s] = t["o" + s] = i
    },
    getVendorAttribute: function(t, e) {
        var i = e.ucfirst();
        return t[e] || t["ms" + i] || t["moz" + i] || t["webkit" + i] || t["o" + i]
    },
    normalizeVendorAttribute: function(t, e) {
        if (!t[e]) {
            var i = this.getVendorAttribute(t, e);
            t[e] = t[e] || i
        }
    },
    fullscreen: function() {
        this.system.canvas.requestFullscreen ? this.system.canvas.requestFullscreen() : this.system.canvas.requestFullScreen && this.system.canvas.requestFullScreen()
    },
    fullscreenSupport: function() {
        return ! (!this.system.canvas.requestFullscreen && !this.system.canvas.requestFullScreen)
    },
    addAsset: function(t, e) {
        return this.addFileToQueue(t, e, "assetQueue")
    },
    addAudio: function(t, e) {
        return this.addFileToQueue(t, e, "audioQueue")
    },
    addFileToQueue: function(t, e, i) {
        return e = e || t,
        t = this.getMediaPath(t) + this.nocache,
        this.paths[e] ? e: (this.paths[e] = t, -1 === this[i].indexOf(t) && this[i].push(t), e)
    },
    getMediaPath: function(t) {
        return this.config.mediaFolder && (t = this.config.mediaFolder + "/" + t),
        t
    },
    removeAsset: function(t) {
        var e = this.paths[t];
        if (this.json[e] && this.json[e].frames) for (var i in this.json[e].frames) this.TextureCache[i].destroy(!0),
        delete this.TextureCache[i];
        else this.TextureCache[e] && (this.TextureCache[e].destroy(!0), delete this.TextureCache[e]);
        delete this.paths[t]
    },
    removeAssets: function() {
        for (var t in this.TextureCache) this.TextureCache[t].destroy(!0),
        delete this.TextureCache[t];
        this.paths = {}
    },
    module: function(t) {
        if (this.current) throw "module " + this.current.name + " has no body";
        if (this.modules[t] && this.modules[t].body) throw "module " + t + " is already defined";
        if (this.current = {
            name: t,
            requires: [],
            loaded: !1
        },
        0 === t.indexOf("game.") && this.current.requires.push("engine.core"), 1 === this.moduleQueue.length && this.DOMLoaded && this.loadModules(), this.modules[t] = this.current, this.moduleQueue.push(this.current), "engine.core" === t) {
            if (this.config.ignoreModules) for (var e = this.coreModules.length - 1; e >= 0; e--) - 1 !== this.config.ignoreModules.indexOf(this.coreModules[e]) && this.coreModules.splice(e, 1);
            this.current.requires = this.coreModules,
            this.body(function() {})
        }
        return this
    },
    require: function(t) {
        var e, t = Array.prototype.slice.call(arguments);
        for (e = 0; e < t.length; e++) t[e] && -1 === this.current.requires.indexOf(t[e]) && this.current.requires.push(t[e]);
        return this
    },
    body: function(t) {
        this.current.body = t,
        this.current = null,
        this.loadFinished && this.loadModules()
    },
    start: function() {
        if (! (this.moduleQueue.length > 0)) {
            this.system = new this.System,
            this.Audio && (this.audio = new this.Audio),
            this.Pool && (this.pool = new this.Pool),
            this.DebugDraw && this.DebugDraw.enabled && this.Debug.enabled && (this.debugDraw = new this.DebugDraw),
            this.Storage && this.Storage.id && (this.storage = new this.Storage),
            this.Analytics && this.Analytics.id && (this.analytics = new this.Analytics),
            this.TweenEngine && (this.tweenEngine = new this.TweenEngine);
            for (var t in this.plugins) this.plugins[t] = new this.plugins[t];
            this.loader = new this.Loader,
            this.system.rotateScreenVisible || this.loader.start(),
            this.onStart()
        }
    },
    onStart: function() {},
    loadScript: function(t, e) {
        this.modules[t] = !0,
        this.waitForLoad++;
        var i = t.replace(/\./g, "/") + ".js" + this.nocache;
        this.config.sourceFolder && (i = this.config.sourceFolder + "/" + i);
        var s = document.createElement("script");
        s.type = "text/javascript",
        s.src = i,
        s.onload = this.scriptLoaded.bind(this),
        s.onerror = function() {
            throw "to load module " + t + " at " + i + " required from " + e
        },
        document.getElementsByTagName("head")[0].appendChild(s)
    },
    scriptLoaded: function() {
        this.waitForLoad--,
        this.loadModules()
    },
    loadModules: function() {
        var t, e, i, s, a, r;
        for (e = 0; e < this.moduleQueue.length; e++) {
            for (s = this.moduleQueue[e], r = !0, i = 0; i < s.requires.length; i++) a = s.requires[i],
            this.modules[a] ? this.modules[a].loaded || (r = !1) : (r = !1, this.loadScript(a, s.name));
            r && s.body && (this.moduleQueue.splice(e, 1), s.loaded = !0, s.body(), t = !0, e--, 0 === this.moduleQueue.length && this.modulesLoaded())
        }
        if (t && this.moduleQueue.length > 0) this.loadModules();
        else {
            if (0 === this.waitForLoad && 0 !== this.moduleQueue.length) {
                var n = [];
                for (e = 0; e < this.moduleQueue.length; e++) {
                    var o = [],
                    h = this.moduleQueue[e].requires;
                    for (i = 0; i < h.length; i++) s = this.modules[h[i]],
                    s && s.loaded || o.push(h[i]);
                    n.push(this.moduleQueue[e].name + " (requires: " + o.join(", ") + ")")
                }
                throw "unresolved modules:\n" + n.join("\n")
            }
            this.loadFinished = !0
        }
    },
    modulesLoaded: function() {
        for (var t in this.config) {
            var e = t.ucfirst();
            if (this[e]) for (var i in this.config[t]) this[e][i] = this.config[t][i]
        }
        this.config.autoStart === !1 || this.system ? this.ready() : this.start()
    },
    ready: function() {},
    setGameLoop: function(t, e) {
        if (game.System.frameRate) return window.setInterval(t, 1e3 / game.System.frameRate);
        if (window.requestAnimationFrame) {
            var i = this.gameLoopId++;
            this.gameLoops[i] = !0;
            var s = function() {
                game.gameLoops[i] && (window.requestAnimationFrame(s, e), t())
            };
            return window.requestAnimationFrame(s, e),
            i
        }
        return window.setInterval(t, 1e3 / 60)
    },
    clearGameLoop: function(t) {
        this.gameLoops[t] ? delete this.gameLoops[t] : window.clearInterval(t)
    },
    boot: function() {
        if (this.config.noCanvasURL) {
            var t = document.createElement("canvas"),
            e = !(!t.getContext || !t.getContext("2d"));
            e || (window.location = this.config.noCanvasURL)
        }
        delete window.pandaConfig,
        Math.distance = function(t, e, i, s) {
            return t = i - t,
            e = s - e,
            Math.sqrt(t * t + e * e)
        },
        Math._random = Math.random,
        Math.random = function(t, e) {
            return "number" == typeof e ? Math._random() * (e - t) + t: Math._random(t)
        },
        Number.prototype.limit = function(t, e) {
            var i = this;
            return t > i && (i = t),
            i > e && (i = e),
            i
        },
        Number.prototype.round = function(t) {
            return t = t ? Math.pow(10, t) : 1,
            Math.round(this * t) / t
        },
        Array.prototype.erase = function(t) {
            for (var e = this.length; e >= 0; e--) if (this[e] === t) return this.splice(e, 1),
            this;
            return this
        },
        Array.prototype.random = function() {
            return this[Math.floor(Math.random() * this.length)]
        },
        Array.prototype.shuffle = function() {
            for (var t = this.length,
            e = t; e--;) {
                var i = parseInt(Math.random() * t),
                s = this[e];
                this[e] = this[i],
                this[i] = s
            }
            return this
        },
        Function.prototype.bind = function(t) {
            var e = this,
            i = [];
            return Array.prototype.push.apply(i, arguments),
            i.shift(),
            function() {
                var s = [];
                return Array.prototype.push.apply(s, i),
                Array.prototype.push.apply(s, arguments),
                e.apply(t, s)
            }
        },
        String.prototype.ucfirst = function() {
            return this.charAt(0).toUpperCase() + this.slice(1)
        },
        this.normalizeVendorAttribute(window, "requestAnimationFrame"),
        this.device.pixelRatio = window.devicePixelRatio || 1,
        this.device.screen = {
            width: window.screen.availWidth * this.device.pixelRatio,
            height: window.screen.availHeight * this.device.pixelRatio
        },
        this.device.iPod = /iPod/i.test(navigator.userAgent),
        this.device.iPhone = /iPhone/i.test(navigator.userAgent),
        this.device.iPhone4 = this.device.iPhone && 2 === this.device.pixelRatio && 920 === this.device.screen.height,
        this.device.iPhone5 = this.device.iPhone && 2 === this.device.pixelRatio && 1096 === this.device.screen.height,
        this.device.iPad = /iPad/i.test(navigator.userAgent),
        this.device.iPadRetina = this.device.iPad && 2 === this.device.pixelRatio,
        this.device.iOS = this.device.iPod || this.device.iPhone || this.device.iPad,
        this.device.iOS5 = this.device.iOS && /OS 5/i.test(navigator.userAgent),
        this.device.iOS6 = this.device.iOS && /OS 6/i.test(navigator.userAgent),
        this.device.iOS7 = this.device.iOS && /OS 7/i.test(navigator.userAgent),
        this.device.iOS71 = this.device.iOS && /OS 7_1/i.test(navigator.userAgent),
        this.device.iOS8 = this.device.iOS && /OS 8/i.test(navigator.userAgent),
        this.device.android = /android/i.test(navigator.userAgent),
        this.device.android2 = /android 2/i.test(navigator.userAgent);
        var i = navigator.userAgent.match(/Android.*AppleWebKit\/([\d.]+)/);
        if (this.device.androidStock = !!(i && i[1] < 537), this.device.ie9 = /MSIE 9/i.test(navigator.userAgent), this.device.ie10 = /MSIE 10/i.test(navigator.userAgent), this.device.ie11 = /rv:11.0/i.test(navigator.userAgent), this.device.ie = this.device.ie10 || this.device.ie11 || this.device.ie9, this.device.wp7 = /Windows Phone OS 7/i.test(navigator.userAgent), this.device.wp8 = /Windows Phone 8/i.test(navigator.userAgent), this.device.wp = this.device.wp7 || this.device.wp8, this.device.wt = this.device.ie && /Tablet/i.test(navigator.userAgent), this.device.opera = /Opera/i.test(navigator.userAgent) || /OPR/i.test(navigator.userAgent), this.device.crosswalk = /Crosswalk/i.test(navigator.userAgent), this.device.cocoonJS = !!navigator.isCocoonJS, this.device.ejecta = /Ejecta/i.test(navigator.userAgent), this.device.facebook = /FB/i.test(navigator.userAgent), this.device.wiiu = /Nintendo WiiU/i.test(navigator.userAgent), this.device.mobile = this.device.iOS || this.device.android || this.device.wp || this.device.wt, "undefined" == typeof navigator.plugins || 0 === navigator.plugins.length) try {
            new ActiveXObject("ShockwaveFlash.ShockwaveFlash"),
            this.device.flash = !0
        } catch(s) {
            this.device.flash = !1
        } else this.device.flash = !!navigator.plugins["Shockwave Flash"];
        for (var a in this.device) if (this.device[a] && this.config[a]) for (var r in this.config[a])"object" == typeof this.config[a][r] ? this.merge(this.config[r], this.config[a][r]) : this.config[r] = this.config[a][r];
        if ((document.location.href.match(/\?nocache/) || this.config.disableCache) && (this.nocache = "?" + Date.now()), "undefined" == typeof this.config.sourceFolder && (this.config.sourceFolder = "src"), "undefined" == typeof this.config.mediaFolder && (this.config.mediaFolder = "media"), this.device.mobile) {
            var n = document.getElementsByTagName("meta");
            for (a = 0; a < n.length; a++) if ("viewport" === n[a].name) {
                var o = !0;
                break
            }
            if (!o) {
                var h = document.createElement("meta");
                h.name = "viewport";
                var l = "width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no";
                this.device.iOS71 && (l += ",minimal-ui"),
                h.content = l,
                document.getElementsByTagName("head")[0].appendChild(h)
            }
        }
        this.module("engine.core"),
        "complete" === document.readyState ? this.DOMReady() : (document.addEventListener("DOMContentLoaded", this.DOMReady.bind(this), !1), window.addEventListener("load", this.DOMReady.bind(this), !1))
    },
    DOMReady: function() {
        if (!this.DOMLoaded) {
            if (!document.body) return setTimeout(this.DOMReady.bind(this), 13);
            this.DOMLoaded = !0,
            this.moduleQueue.length > 1 && this.loadModules()
        }
    },
    createClass: function(t, e, i) {
        if (game[t]) throw "class " + t + " already created";
        return "object" == typeof e && (i = e, e = "Class"),
        game[t] = game[e].extend(i)
    },
    createScene: function(t, e) {
        return this.createClass("Scene" + t, "Scene", e)
    },
    addAttributes: function(t, e) {
        if (!this[t]) throw "class " + t + " not found";
        for (var i in e) this[t][i] = e[i]
    },
    getTexture: function(t) {
        return this.TextureCache[this.paths[t]]
    }
};
game.Core = game,
game.initializing = !1,
game.fnTest = /xyz/.test(function() {
    var t;
    return t
}) ? /\bsuper\b/: /[\D|\d]*/,
game.Class = function() {},
game.Class.extend = function(t) {
    function e() {
        if (!game.initializing) {
            if (this.staticInit) {
                var t = this.staticInit.apply(this, arguments);
                if (t) return t
            }
            for (var e in this)"object" == typeof this[e] && (this[e] = game.copy(this[e]));
            this.init && this.init.apply(this, arguments)
        }
        return this
    }
    var i = this.prototype;
    game.initializing = !0;
    var s = new this;
    game.initializing = !1;
    var a = function(t, e) {
        return function() {
            var s = this["super"];
            this["super"] = i[t];
            var a = e.apply(this, arguments);
            return this["super"] = s,
            a
        }
    };
    for (var r in t)"function" == typeof t[r] && "function" == typeof i[r] && game.fnTest.test(t[r]) ? s[r] = a(r, t[r]) : s[r] = t[r];
    return e.prototype = s,
    e.prototype.constructor = e,
    e.extend = game.Class.extend,
    e.inject = function(t) {
        var e = this.prototype,
        i = {},
        s = function(t, e) {
            return function() {
                var s = this["super"];
                this["super"] = i[t];
                var a = e.apply(this, arguments);
                return this["super"] = s,
                a
            }
        };
        for (var a in t)"function" == typeof t[a] && "function" == typeof e[a] && game.fnTest.test(t[a]) ? (i[a] = e[a], e[a] = s(a, t[a])) : e[a] = t[a]
    },
    e
},
"undefined" != typeof exports ? exports = module.exports = game: game.boot(),
game.module("engine.analytics").body(function() {
    game.createClass("Analytics", {
        trackId: null,
        clientId: null,
        init: function(t) {
            if (this.trackId = t || game.Analytics.id, navigator.onLine) if (game.device.cocoonJS) {
                this.clientId = Date.now();
                var e = new XMLHttpRequest,
                i = "v=1&tid=" + this.trackId + "&cid=" + this.clientId + "&t=pageview&dp=%2F";
                e.open("POST", "http://www.google-analytics.com/collect", !0),
                e.send(i)
            } else !
            function(t, e, i, s, a, r, n) {
                t.GoogleAnalyticsObject = a,
                t[a] = t[a] ||
                function() { (t[a].q = t[a].q || []).push(arguments)
                },
                t[a].l = 1 * new Date,
                r = e.createElement(i),
                n = e.getElementsByTagName(i)[0],
                r.async = 1,
                r.src = s,
                n.parentNode.insertBefore(r, n)
            } (window, document, "script", "//www.google-analytics.com/analytics.js", "ga"),
            ga("create", t, "auto"),
            ga("send", "pageview")
        },
        send: function(t, e, i, s) {
            if (navigator.onLine) if (game.device.cocoonJS) {
                var a = new XMLHttpRequest,
                r = "v=1&tid=" + this.trackId + "&cid=" + this.clientId + "&t=event&ec=" + t + "&ea=" + e;
                "undefined" != typeof i && (r += "&el=" + i),
                "undefined" != typeof s && (r += "&ev=" + s),
                a.open("POST", "http://www.google-analytics.com/collect", !0),
                a.send(r)
            } else ga("send", "event", t, e, i, s)
        }
    }),
    game.addAttributes("Analytics", {
        id: ""
    })
}),
game.module("engine.audio").body(function() {
    game.createClass("Audio", {
        audioId: 1,
        audioObjects: {},
        systemPaused: [],
        sources: {},
        formats: [],
        playingSounds: [],
        pausedSounds: [],
        currentMusic: null,
        currentMusicName: null,
        musicMuted: !1,
        soundMuted: !1,
        init: function() {
            if (game.normalizeVendorAttribute(window, "AudioContext"), game.device.iOS5 && (game.Audio.enabled = !1), game.device.wp7 && (game.Audio.enabled = !1), game.device.android2 && (game.Audio.enabled = !1), game.Audio.enabled || (game.Audio.webAudio = !1), game.Audio.webAudio && !window.AudioContext && (game.Audio.webAudio = !1), game.Audio.enabled) for (var t = new Audio,
            e = 0; e < game.Audio.formats.length; e++) t.canPlayType(game.Audio.formats[e].type) && this.formats.push(game.Audio.formats[e].ext);
            game.device.opera && game.Audio.webAudio && this.formats.erase("m4a"),
            0 === this.formats.length && (game.Audio.enabled = !1),
            game.Audio.enabled && game.Audio.webAudio && (this.context = new AudioContext, this.gainNode = this.context.createGain ? this.context.createGain() : this.context.createGainNode(), this.gainNode.connect(this.context.destination)),
            this.musicVolume = game.Audio.musicVolume,
            this.soundVolume = game.Audio.soundVolume
        },
        _decode: function(t, e, i, s) {
            this.context.decodeAudioData(t.response, this._loaded.bind(this, e, i), s.bind(this, e))
        },
        _load: function(t, e, i) {
            var s = t.split(".").pop(); - 1 === this.formats.indexOf(s) && (s = this.formats[0]);
            var a = t.replace(/[^\.]+$/, s + game.nocache);
            if (this.context) {
                var r = new XMLHttpRequest;
                r.open("GET", a, !0),
                r.responseType = "arraybuffer",
                r.onload = this._decode.bind(this, r, t, e, i),
                r.send()
            } else {
                var n = new Audio(a);
                game.device.ie ? this._loaded(t, e, n) : (n.loadCallback = this._loaded.bind(this, t, e, n), n.addEventListener("canplaythrough", n.loadCallback), n.addEventListener("error", i)),
                n.preload = "auto",
                n.load()
            }
        },
        _loaded: function(t, e, i) {
            for (var s in game.paths) if (game.paths[s] === t) {
                var a = s;
                break
            }
            this.sources[a] = {
                audio: i,
                path: t
            },
            this.context || (i.removeEventListener("canplaythrough", i.loadCallback), i.addEventListener("ended",
            function() {
                this.playing = !1
            })),
            "function" == typeof e && e(t)
        },
        _onended: function(t) {
            var e = this.playingSounds.indexOf(t); - 1 !== e && this.playingSounds.splice(e, 1),
            t === this.currentMusic && (this.currentMusic = null, this.currentMusicName = null);
            var i = this.audioObjects[t];
            return i ? ("function" == typeof i.callback && i.callback(), void delete this.audioObjects[t]) : !1
        },
        _fade: function(t, e, i) {
            var s = this.audioObjects[t];
            if (!s) return ! 1;
            if (e = e || 1e3, e /= 1e3, !this.context) return ! 1;
            var a = this.context.currentTime;
            1 === i && (s.gainNode.gain.value = 0);
            var r = s.gainNode.gain.value;
            return s.gainNode.gain.linearRampToValueAtTime(r, a),
            s.gainNode.gain.linearRampToValueAtTime(i, a + e),
            !0
        },
        _play: function(t, e, i, s, a, r, n) {
            if (!game.Audio.enabled) return ! 1;
            if ("number" != typeof n && (n = this.audioId++), this.context) {
                var o = this.context.createBufferSource();
                o.buffer = this.sources[t].audio,
                o.loop = !!e,
                o.playbackRate.value = 1,
                o.callback = s,
                o.onended = this._onended.bind(this, n);
                var h = this.context.createGain ? this.context.createGain() : this.context.createGainNode();
                h.gain.value = "number" == typeof i ? i: 1,
                h.connect(this.gainNode),
                o.connect(h),
                o.gainNode = h;
                var l = r || 0;
                o.start ? o.start(0, l) : o.noteOn(0, l),
                o.startTime = this.context.currentTime - l
            } else {
                this.sources[t].audio.volume = "number" == typeof i ? i: 1,
                this.sources[t].audio.loop = e,
                this.sources[t].audio.playing = !0,
                this.sources[t].audio.callback = s,
                this.sources[t].audio.onended = this._onended.bind(this, n),
                game.device.ie || (this.sources[t].audio.currentTime = 0),
                this.sources[t].audio.play();
                var o = this.sources[t].audio
            }
            return this.audioObjects[n] = o,
            n
        },
        _stop: function(t, e) {
            var i = this.audioObjects[t];
            if (!i) return ! 1;
            if (e && (i.callback = null), this.context) {
                if (i.pauseTime >= 0) return ! 1;
                "function" == typeof i.stop ? i.stop(0) : i.noteOff(0)
            } else i.pause(),
            i.playing = !1;
            return ! 0
        },
        _pause: function(t) {
            var e = this.audioObjects[t];
            return e ? (this.context ? (e.onended = null, "function" == typeof e.stop ? e.stop(0) : e.noteOff(0), e.pauseTime = (this.context.currentTime - e.startTime) % e.buffer.duration) : (e.currentTime > 0 && e.currentTime < e.duration || e.loop) && e.pause(), !0) : !1
        },
        _resume: function(t) {
            var e = this.audioObjects[t];
            if (!e) return ! 1;
            if (this.context) {
                if (! (e.pauseTime >= 0)) return ! 1;
                var i = this._getNameForAudio(e);
                this._play(i, e.loop, e.gainNode.gain.value, e.callback, e.playbackRate, e.pauseTime, t)
            } else {
                if (!e.playing) return ! 1;
                e.play()
            }
            return ! 0
        },
        _mute: function(t) {
            var e = this.audioObjects[t];
            return e ? (this.context ? e.gainNode.gain.value = 0 : e.volume = 0, !0) : !1
        },
        _unmute: function(t, e) {
            var i = this.audioObjects[t];
            return i ? (this.context ? i.gainNode.gain.value = e || 1 : i.volume = e || 1, !0) : !1
        },
        _getNameForAudio: function(t) {
            if (this.context) {
                for (var e in this.sources) if (this.sources[e].audio === t.buffer) return e
            } else for (var e in this.sources) if (this.sources[e].audio === t) return e;
            return ! 1
        },
        fadeIn: function(t, e) {
            return this._fade(t, e, 1)
        },
        fadeOut: function(t, e) {
            return this._fade(t, e, 0)
        },
        playSound: function(t, e, i, s) {
            var a = this.soundMuted ? 0 : this.soundVolume,
            r = this._play(t, e, a, i, s);
            return r && this.playingSounds.push(r),
            r
        },
        stopSound: function(t, e) {
            if (t) return this._stop(t, !!e);
            for (var i = this.playingSounds.length - 1; i >= 0; i--) this._stop(this.playingSounds[i], !!e);
            return ! 0
        },
        pauseSound: function(t) {
            if (t) {
                var e = this.playingSounds.indexOf(t);
                if ( - 1 === e) return ! 1;
                this._pause(t),
                this.playingSounds.splice(e, 1),
                this.pausedSounds.push(t)
            } else {
                for (var i = this.playingSounds.length - 1; i >= 0; i--) this._pause(this.playingSounds[i]),
                this.pausedSounds.push(this.playingSounds[i]);
                this.playingSounds.length = 0
            }
            return ! 0
        },
        resumeSound: function(t) {
            var e = this.pausedSounds.indexOf(t);
            return - 1 === e ? !1 : (this._resume(t), this.playingSounds.push(t), this.pausedSounds.splice(e, 1), !0)
        },
        muteSound: function(t) {
            if (t) return this._mute(t);
            this.soundMuted = !0;
            var e;
            for (e = this.playingSounds.length - 1; e >= 0; e--) this._mute(this.playingSounds[e]);
            for (e = this.pausedSounds.length - 1; e >= 0; e--) this._mute(this.pausedSounds[e]);
            return ! 0
        },
        unmuteSound: function(t) {
            if (t) return this._unmute(t, this.soundVolume);
            this.soundMuted = !1;
            var e;
            for (e = this.playingSounds.length - 1; e >= 0; e--) this._unmute(this.playingSounds[e], this.soundVolume);
            for (e = this.pausedSounds.length - 1; e >= 0; e--) this._unmute(this.pausedSounds[e], this.soundVolume);
            return ! 0
        },
        playMusic: function(t, e) {
            var i = this.musicMuted ? 0 : this.musicVolume;
            return "undefined" == typeof e && (e = !0),
            this.currentMusic && this._stop(this.currentMusic),
            this.currentMusic = this._play(t, !!e, i),
            this.currentMusicName = t,
            !!this.currentMusic
        },
        stopMusic: function() {
            if (this.currentMusic) {
                var t = this._stop(this.currentMusic);
                return this.currentMusic = null,
                this.currentMusicName = null,
                !!t
            }
            return ! 1
        },
        pauseMusic: function() {
            return this.currentMusic ? this._pause(this.currentMusic) : !1
        },
        resumeMusic: function() {
            return this._resume(this.currentMusic)
        },
        muteMusic: function() {
            this.musicMuted = !0,
            this.currentMusic && this._mute(this.currentMusic)
        },
        unmuteMusic: function() {
            this.musicMuted = !1,
            this.currentMusic && this._unmute(this.currentMusic, this.musicVolume)
        },
        setVolume: function(t, e) {
            var i = this.audioObjects[t];
            return i ? void(this.context ? i.gainNode.gain.value = e: i.volume = e) : !1
        },
        setSoundVolume: function(t) {
            this.soundVolume = t;
            var e;
            for (e = this.playingSounds.length - 1; e >= 0; e--) this.context ? this.audioObjects[this.playingSounds[e]].gainNode.gain.value = this.soundVolume: this.playingSounds[e].volume = this.soundVolume;
            for (e = this.pausedSounds.length - 1; e >= 0; e--) this.context ? this.audioObjects[this.pausedSounds[e]].gainNode.gain.value = this.soundVolume: this.pausedSounds[e].volume = this.soundVolume
        },
        setMusicVolume: function(t) {
            this.musicVolume = t,
            this.currentMusic && (this.context ? this.audioObjects[this.currentMusic].gainNode.gain.value = this.musicVolume: this.currentMusic.volume = this.musicVolume)
        },
        setPlaybackRate: function(t, e) {
            if (this.context) {
                var i = this.audioObjects[t];
                i && (i.playbackRate.value = e || 1)
            }
        },
        isSoundPlaying: function(t) {
            return - 1 !== this.playingSounds.indexOf(t) ? !0 : !1
        },
        isMusicPlaying: function() {
            return !! this.currentMusic
        },
        toggleSound: function() {
            return this.soundMuted = !this.soundMuted,
            this.soundMuted ? this.muteSound() : this.unmuteSound(),
            this.soundMuted
        },
        toggleMusic: function() {
            return this.musicMuted = !this.musicMuted,
            this.musicMuted ? this.muteMusic() : this.unmuteMusic(),
            this.musicMuted
        },
        systemPause: function() {
            this.pauseMusic();
            for (var t = this.playingSounds.length - 1; t >= 0; t--) this._pause(this.playingSounds[t]),
            this.systemPaused.push(this.playingSounds[t])
        },
        systemResume: function() {
            this.resumeMusic();
            for (var t = this.systemPaused.length - 1; t >= 0; t--) this._resume(this.systemPaused[t]);
            this.systemPaused.length = 0
        }
    }),
    game.addAttributes("Audio", {
        enabled: !0,
        webAudio: !0,
        formats: [{
            ext: "ogg",
            type: 'audio/ogg; codecs="vorbis"'
        },
        {
            ext: "mp3",
            type: "audio/mp3"
        }],
        stopOnSceneChange: !0,
        soundVolume: 1,
        musicVolume: 1
    })
}),
game.module("engine.camera").body(function() {
    game.createClass("Camera", {
        maxSpeed: 200,
        acceleration: 3,
        offset: null,
        target: null,
        container: null,
        speed: null,
        scale: 1,
        rounding: !1,
        sensorPosition: null,
        sensorWidth: 0,
        sensorHeight: 0,
        threshold: 1,
        minX: null,
        maxX: null,
        minY: null,
        maxY: null,
        init: function(t, e) {
            this.position = new game.Point,
            this.speed = new game.Point,
            this.offset = new game.Point(game.system.width / 2, game.system.height / 2),
            this.sensorPosition = new game.Point(this.offset.x, this.offset.y),
            this.sensorWidth = 200 * game.scale,
            this.sensorHeight = 200 * game.scale,
            "number" == typeof t && "number" == typeof e && this.setPosition(t, e),
            game.scene.addObject(this)
        },
        addTo: function(t) {
            return this.container = t,
            this.container.position.set( - this.position.x, -this.position.y),
            this
        },
        setTarget: function(t) {
            this.target = t,
            this.sensorPosition.set(this.target.position.x * this.scale, this.target.position.y * this.scale)
        },
        setPosition: function(t, e) {
            this.position.set(t - this.offset.x, e - this.offset.y),
            "number" == typeof this.minX && this.position.x < this.minX ? (this.position.x = this.minX, this.speed.x = 0) : "number" == typeof this.maxX && this.position.x > this.maxX && (this.position.x = this.maxX, this.speed.x = 0),
            "number" == typeof this.minY && this.position.y < this.minY ? (this.position.y = this.minY, this.speed.y = 0) : "number" == typeof this.maxY && this.position.y > this.maxY && (this.position.y = this.maxY, this.speed.y = 0),
            this.container && (this.container.position.x = -(this.rounding ? this.position.x + .5 | 0 : this.position.x), this.container.position.y = -(this.rounding ? this.position.y + .5 | 0 : this.position.y))
        },
        setSensor: function(t, e) {
            this.sensorWidth = t,
            this.sensorHeight = e
        },
        moveSensor: function() {
            if (this.target) {
                var t = Math.abs(this.target.width) * this.scale,
                e = Math.abs(this.target.height) * this.scale,
                i = (this.target.position.x + this.target.width / 2) * this.scale,
                s = (this.target.position.y + this.target.height / 2) * this.scale; (this.sensorWidth < t || this.sensorHeight < e) && this.setSensor(t, e),
                i < this.sensorPosition.x - this.sensorWidth / 2 + t / 2 ? this.sensorPosition.x = i + this.sensorWidth / 2 - t / 2 : i + (this.sensorWidth / 2 + t / 2) > this.sensorPosition.x + this.sensorWidth && (this.sensorPosition.x = i + (this.sensorWidth / 2 + t / 2) - this.sensorWidth),
                s < this.sensorPosition.y - this.sensorHeight / 2 + e / 2 ? this.sensorPosition.y = s + this.sensorHeight / 2 - e / 2 : s + (this.sensorHeight / 2 + e / 2) > this.sensorPosition.y + this.sensorHeight && (this.sensorPosition.y = s + (this.sensorHeight / 2 + e / 2) - this.sensorHeight)
            }
        },
        moveCamera: function() {
            this.speed.x = (this.position.x - this.sensorPosition.x + this.offset.x).limit( - this.maxSpeed, this.maxSpeed),
            this.speed.y = (this.position.y - this.sensorPosition.y + this.offset.y).limit( - this.maxSpeed, this.maxSpeed),
            this.speed.x > this.threshold || this.speed.x < -this.threshold || this.speed.y > this.threshold || this.speed.y < -this.threshold ? this.setPosition(this.position.x + this.offset.x - this.speed.x * this.acceleration * game.system.delta, this.position.y + this.offset.y - this.speed.y * this.acceleration * game.system.delta) : this.speed.set(0, 0)
        },
        update: function() {
            this.moveSensor(),
            this.moveCamera()
        }
    })
}),
game.module("engine.debug").require("engine.pixi", "engine.physics", "engine.camera", "engine.renderer").body(function() {
    game.createClass("Debug", {
        frames: 0,
        last: 0,
        sprites: 0,
        init: function() {
            this.debugDiv = document.createElement("div"),
            this.debugDiv.id = "pandaDebug",
            this.debugDiv.style.position = "absolute",
            this.debugDiv.style.left = game.Debug.positionX + "px",
            this.debugDiv.style.top = game.Debug.positionY + "px",
            this.debugDiv.style.zIndex = 9999,
            this.debugDiv.style.backgroundColor = game.Debug.backgroundColor,
            this.debugDiv.style.padding = "2px",
            this.debugDiv.style.color = game.Debug.color,
            this.debugDiv.style.fontFamily = "Arial",
            this.debugDiv.style.fontSize = "14px",
            document.body.appendChild(this.debugDiv)
        },
        reset: function() {
            this.sprites = -1
        },
        update: function() {
            this.frames++,
            game.Timer.last >= this.last + game.Debug.frequency && (this.fps = Math.round(1e3 * this.frames / (game.Timer.last - this.last)), this.last = game.Timer.last, this.frames = 0);
            var t = "FPS: " + this.fps;
            game.scene.objects && (t += " OBJECTS: " + game.scene.objects.length),
            t += " SPRITES: " + this.sprites,
            game.tweenEngine && (t += " TWEENS: " + game.tweenEngine.tweens.length),
            game.scene.timers && (t += " TIMERS: " + game.scene.timers.length),
            game.scene.emitters && (t += " EMITTERS: " + game.scene.emitters.length),
            game.scene.world && (t += " BODIES:" + game.scene.world.bodies.length),
            this.debugDiv.innerHTML = t
        }
    }),
    game.addAttributes("Debug", {
        enabled: !!document.location.href.toLowerCase().match(/\?debug/),
        frequency: 500,
        color: "red",
        backgroundColor: "black",
        positionX: 0,
        positionY: 0
    }),
    game.PIXI.DisplayObject.prototype._updateTransform = game.PIXI.DisplayObject.prototype.updateTransform,
    game.PIXI.DisplayObject.prototype.updateTransform = function() {
        game.system.debug && game.system.debug.sprites++,
        this._updateTransform()
    },
    game.PIXI.DisplayObject.prototype.displayObjectUpdateTransform = game.PIXI.DisplayObject.prototype.updateTransform,
    game.createClass("DebugDraw", {
        spriteContainer: null,
        bodyContainer: null,
        init: function() {
            this.spriteContainer = new game.Container,
            this.bodyContainer = new game.Container
        },
        reset: function() {
            for (var t = this.spriteContainer.children.length - 1; t >= 0; t--) this.spriteContainer.removeChild(this.spriteContainer.children[t]);
            game.system.stage.addChild(this.spriteContainer);
            for (var t = this.bodyContainer.children.length - 1; t >= 0; t--) this.bodyContainer.removeChild(this.bodyContainer.children[t]);
            game.system.stage.addChild(this.bodyContainer)
        },
        addSprite: function(t) {
            var e = new game.Graphics;
            e.beginFill(game.DebugDraw.spriteColor),
            e.lineStyle(1, game.DebugDraw.spriteLineColor),
            t.hitArea ? t.hitArea instanceof game.HitRectangle ? e.drawRect(t.hitArea.x, t.hitArea.y, t.hitArea.width, t.hitArea.height) : t.hitArea instanceof game.HitCircle && e.drawCircle(t.hitArea.x, t.hitArea.y, t.hitArea.radius) : e.drawRect( - t.width * t.anchor.x, -t.height * t.anchor.y, t.width, t.height),
            e.position.x = t.position.x,
            e.position.y = t.position.y,
            e.target = t,
            e.alpha = game.DebugDraw.spriteAlpha,
            this.spriteContainer.addChild(e)
        },
        addBody: function(t) {
            var e = new game.Graphics;
            this.drawBodySprite(e, t),
            e.position.x = t.position.x,
            e.position.y = t.position.y,
            e.target = t,
            e.alpha = game.DebugDraw.bodyAlpha,
            this.bodyContainer.addChild(e)
        },
        drawBodySprite: function(t, e) {
            t.clear(),
            t.beginFill(game.DebugDraw.bodyColor),
            t.lineStyle(1, game.DebugDraw.bodyLineColor),
            e.shape instanceof game.Rectangle ? t.drawRect( - e.shape.width / 2, -e.shape.height / 2, e.shape.width, e.shape.height) : e.shape instanceof game.Circle && t.drawCircle(0, 0, e.shape.radius)
        },
        updateSprites: function() {
            for (var t, e = this.spriteContainer.children.length - 1; e >= 0; e--) t = this.spriteContainer.children[e],
            t.rotation = t.target.rotation,
            t.visible = t.target.worldVisible,
            t.position.x = t.target.worldTransform.tx,
            t.position.y = t.target.worldTransform.ty,
            t.scale.x = t.target.scale.x,
            t.scale.y = t.target.scale.y,
            t.target.parent || this.spriteContainer.removeChild(t);
            game.system.debug.sprites -= this.spriteContainer.children.length
        },
        updateBodies: function() {
            for (var t, e = this.bodyContainer.children.length - 1; e >= 0; e--) t = this.bodyContainer.children[e],
            t.rotation = t.target.rotation,
            t.width !== t.target.shape.width || t.height !== t.target.shape.height ? this.drawBodySprite(t, t.target) : t.radius !== t.target.shape.radius && this.drawBodySprite(t, t.target),
            t.position.x = t.target.position.x,
            t.position.y = t.target.position.y,
            t.target.world || t.remove();
            game.system.debug.sprites -= this.bodyContainer.children.length
        },
        update: function() {
            game.system.debug.sprites -= 2,
            this.updateSprites(),
            this.updateBodies()
        }
    }),
    game.addAttributes("DebugDraw", {
        enabled: !!document.location.href.toLowerCase().match(/\?debugdraw/),
        spriteColor: 16711680,
        spriteLineColor: 255,
        spriteAlpha: .5,
        bodyColor: 255,
        bodyLineColor: 16711680,
        bodyAlpha: .5
    }),
    game.World.inject({
        addBody: function(t) {
            this["super"](t),
            game.debugDraw && t.shape && game.debugDraw.addBody(t)
        }
    }),
    game.Camera.inject({
        init: function(t, e) {
            this["super"](t, e),
            game.debugDraw && game.Camera.debug && (this.debugBox = new game.Graphics, this.debugBox.beginFill(game.Camera.debugColor), this.debugBox.alpha = game.Camera.debugAlpha, this.debugBox.drawRect( - this.sensorWidth / 2, -this.sensorHeight / 2, this.sensorWidth, this.sensorHeight), game.system.stage.addChild(this.debugBox))
        },
        setSensor: function(t, e) {
            this["super"](t, e),
            this.debugBox && (this.debugBox.clear(), this.debugBox.beginFill(game.Camera.debugColor), this.debugBox.drawRect( - this.sensorWidth / 2, -this.sensorHeight / 2, this.sensorWidth, this.sensorHeight))
        },
        moveCamera: function() {
            this["super"](),
            this.debugBox && (this.debugBox.alpha = game.Camera.debugAlpha * (0 === this.speed.x && 0 === this.speed.y ? 1 : 2))
        },
        update: function() {
            this["super"](),
            this.debugBox && this.debugBox.position.set(this.sensorPosition.x - this.position.x, this.sensorPosition.y - this.position.y)
        }
    }),
    game.addAttributes("Camera", {
        debug: !1,
        debugColor: 16711935,
        debugAlpha: .2
    }),
    game.PIXI.DisplayObjectContainer.prototype._addChild = game.PIXI.DisplayObjectContainer.prototype.addChild,
    game.PIXI.DisplayObjectContainer.prototype.addChild = function(t) {
        game.debugDraw && t.interactive && game.debugDraw.addSprite(t),
        this._addChild(t)
    },
    game.onStart = function() {
        game.Debug && game.Debug.enabled && (console.log("Panda.js " + game.version), console.log("Pixi.js " + game.PIXI.VERSION.replace("v", "")), console.log((this.system.renderer.gl ? "WebGL": "Canvas") + " renderer " + this.system.width + "x" + this.system.height), console.log(this.Audio && this.Audio.enabled ? (this.audio.context ? "Web Audio": "HTML5 Audio") + " engine": "Audio disabled"), this.config.version && console.log((this.config.name ? this.config.name: "Game") + " " + this.config.version))
    }
}),
game.module("engine.keyboard").body(function() {
    game.createClass("Keyboard", {
        keysDown: [],
        init: function() {
            window.addEventListener("keydown", this.keydown.bind(this)),
            window.addEventListener("keyup", this.keyup.bind(this)),
            window.addEventListener("blur", this.resetKeys.bind(this))
        },
        resetKeys: function() {
            for (var t in this.keysDown) this.keysDown[t] = !1;
        },
        keydown: function(t) {
            if (game.scene && (game.Keyboard.keys[t.keyCode] || (game.Keyboard.keys[t.keyCode] = t.keyCode), !this.keysDown[game.Keyboard.keys[t.keyCode]])) {
                this.keysDown[game.Keyboard.keys[t.keyCode]] = !0;
                var e = game.scene.keydown(game.Keyboard.keys[t.keyCode], this.down("SHIFT"), this.down("CTRL"), this.down("ALT"));
                e && t.preventDefault()
            }
        },
        keyup: function(t) {
            game.scene && (this.keysDown[game.Keyboard.keys[t.keyCode]] = !1, game.scene.keyup(game.Keyboard.keys[t.keyCode]))
        },
        down: function(t) {
            return !! this.keysDown[t]
        }
    }),
    game.addAttributes("Keyboard", {
        keys: {
            8 : "BACKSPACE",
            9 : "TAB",
            13 : "ENTER",
            16 : "SHIFT",
            17 : "CTRL",
            18 : "ALT",
            19 : "PAUSE",
            20 : "CAPS_LOCK",
            27 : "ESC",
            32 : "SPACE",
            33 : "PAGE_UP",
            34 : "PAGE_DOWN",
            35 : "END",
            36 : "HOME",
            37 : "LEFT",
            38 : "UP",
            39 : "RIGHT",
            40 : "DOWN",
            44 : "PRINT_SCREEN",
            45 : "INSERT",
            46 : "DELETE",
            48 : "0",
            49 : "1",
            50 : "2",
            51 : "3",
            52 : "4",
            53 : "5",
            54 : "6",
            55 : "7",
            56 : "8",
            57 : "9",
            65 : "A",
            66 : "B",
            67 : "C",
            68 : "D",
            69 : "E",
            70 : "F",
            71 : "G",
            72 : "H",
            73 : "I",
            74 : "J",
            75 : "K",
            76 : "L",
            77 : "M",
            78 : "N",
            79 : "O",
            80 : "P",
            81 : "Q",
            82 : "R",
            83 : "S",
            84 : "T",
            85 : "U",
            86 : "V",
            87 : "W",
            88 : "X",
            89 : "Y",
            90 : "Z",
            96 : "NUM_ZERO",
            97 : "NUM_ONE",
            98 : "NUM_TWO",
            99 : "NUM_THREE",
            100 : "NUM_FOUR",
            101 : "NUM_FIVE",
            102 : "NUM_SIX",
            103 : "NUM_SEVEN",
            104 : "NUM_EIGHT",
            105 : "NUM_NINE",
            106 : "NUM_MULTIPLY",
            107 : "NUM_PLUS",
            109 : "NUM_MINUS",
            110 : "NUM_PERIOD",
            111 : "NUM_DIVISION",
            112 : "F1",
            113 : "F2",
            114 : "F3",
            115 : "F4",
            116 : "F5",
            117 : "F6",
            118 : "F7",
            119 : "F8",
            120 : "F9",
            121 : "F10",
            122 : "F11",
            123 : "F12",
            186 : "SEMICOLON",
            187 : "PLUS",
            189 : "MINUS",
            192 : "GRAVE_ACCENT",
            222 : "SINGLE_QUOTE"
        }
    }),
    game.keyboard = new game.Keyboard
}),
game.module("engine.loader").body(function() {
    game.createClass("Loader", {
        loaded: 0,
        percent: 0,
        assetQueue: [],
        audioQueue: [],
        started: !1,
        dynamic: !0,
        callback: null,
        logo: null,
        logoSpill: null,
        logoWidth: 340,
        logoHeight: 120,
        hilo: null,
        todoLoad: !1,
        logoResp: null,
        linkResp: null,
        esperarLogo: !0,
        blanco: null,
        blancoAgregado: !1,
        init: function(t) {
            this.onComplete(t),
            this.stage = game.system.stage,
            this.blanco = new game.Sprite(game.Texture.fromImage("media/blanco.jpg"));
            for (var e = 0; e < game.assetQueue.length; e++) game.TextureCache[game.assetQueue[e]] || this.assetQueue.push(this.getPath(game.assetQueue[e]));
            if (game.assetQueue.length = 0, game.Audio.enabled) {
                for (var e = 0; e < game.audioQueue.length; e++) this.audioQueue.push(game.audioQueue[e]);
                game.audioQueue.length = 0
            }
            this.assetQueue.length > 0 && (this.loader = new game.AssetLoader(this.assetQueue, game.Loader.crossorigin), this.loader.onProgress = this.progress.bind(this), this.loader.onComplete = this.loadAudio.bind(this), this.loader.onError = this.error.bind(this)),
            this.assetQueue.length + this.audioQueue.length === 0 && (this.percent = 100),
            this.hilo = setInterval(this.loadSponsor.bind(this), 30)
        },
        loadSponsor2: function() {
            if (this.blanco.width > 1 && 0 == this.blancoAgregado && (this.blancoAgregado = !0, this.stage.addChild(this.blanco), this.stage.setChildIndex(this.blanco, 0), this.blanco.position.set(0, 0)), LOGO.width > 1 && MORE.width > 1) {
                var t = this.logoResp,
                e = this.linkResp;
                clearInterval(this.hilo),
                t.addEventListener ? (t.addEventListener("click", this.logoSpill.action), t.addEventListener("touchend", this.logoSpill.action)) : t.attachEvent && (t.attachEvent("click", this.logoSpill.action), t.attachEvent("touchend", this.logoSpill.action)),
                t.setAttribute("id", "spilgames-branding-image"),
                t.className += " spilgames-branding-image",
                document.getElementById("gameContainer").appendChild(t);
                var i = parseInt(game.system.canvas.style.width.substr(0, game.system.canvas.style.width.length - 2)),
                s = parseInt(game.system.canvas.style.height.substr(0, game.system.canvas.style.width.length - 2)),
                a = window.innerWidth,
                r = window.innerHeight,
                n = (a - i) / 2,
                o = (r - s) / 2;
                CENTERX = n,
                CENTERY = o;
                var h = 100 * s / 900 / 100;
                SCALE = h,
                this.logoWidth = LOGO.width,
                this.logoHeight = LOGO.height,
                this.logoWidth = this.logoWidth * h,
                this.logoHeight = this.logoHeight * h,
                LOGOW = this.logoWidth,
                LOGOH = this.logoHeight,
                W = i,
                H = s;
                var l = Math.round(i / 2 - this.logoWidth / 2) + n,
                d = Math.round(s / 2 + this.logoHeight / 2) + o;
                if (LOGOimg = document.getElementById("spilgames-branding-image").style, LOGO = t, document.getElementById("spilgames-branding-image").style.position = "absolute", document.getElementById("spilgames-branding-image").style.width = "" + this.logoWidth + "px", document.getElementById("spilgames-branding-image").style.height = "" + this.logoHeight + "px", document.getElementById("spilgames-branding-image").style.top = "" + d + "px", document.getElementById("spilgames-branding-image").style.left = "" + l + "px", document.getElementById("spilgames-branding-image").style.cursor = "pointer", document.getElementById("gameContainer").appendChild(e), moreGamesimg = document.getElementById("spilgames-more-games-btn").style, document.getElementById("spilgames-more-games-btn").style.cursor = "pointer", document.getElementById("spilgames-more-games-btn").style.position = "absolute", game.device.mobile) {
                    moreGamesimg.width = "" + MORE.width * SCALE + "px",
                    moreGamesimg.height = "" + MORE.height * SCALE + "px";
                    var u = MORE.width * SCALE,
                    c = MORE.height * SCALE;
                    moreGamesimg.top = "" + (window.innerHeight - c) + "px",
                    moreGamesimg.left = "" + (window.innerWidth - u) + "px",
                    moreGamesimg.right = null,
                    moreGamesimg.bottom = null,
                    moreGamesimg.visibility = "hidden"
                } else {
                    moreGamesimg.width = "" + MORE.width * SCALE + "px",
                    moreGamesimg.height = "" + MORE.height * SCALE + "px";
                    var u = MORE.width * SCALE,
                    c = MORE.height * SCALE,
                    l = Math.round(W - u) + CENTERX,
                    d = Math.round(H / 2 + c / 2) + CENTERY,
                    m = window.innerHeight / 2;
                    moreGamesimg.top = "" + (m + 375 * SCALE + CENTERY) + "px",
                    moreGamesimg.left = null,
                    moreGamesimg.left = "" + l + "px",
                    moreGamesimg.right = null,
                    moreGamesimg.bottom = null,
                    moreGamesimg.visibility = "hidden"
                }
                this.todoLoad = !0
            }
        },
        loadSponsor: function() {
            if (null == Api || game.system.rotateScreenVisible) null == Api && (this.todoLoad = !0);
            else if (clearInterval(this.hilo), null == this.logoSpill) if (this.logoSpill = Api.Branding.getLogo(), noBrand = this.logoSpill, this.logoSpill.image) {
                var t = document.createElement("img");
                t.src = this.logoSpill.image,
                LOGO = new game.Sprite(game.Texture.fromImage(this.logoSpill.image)),
                MORE = new game.Sprite(game.Texture.fromImage("media/buttons/mroegames.png"));
                var e = Api.Branding.getLink("more_games"),
                i = document.createElement("img");
                i.src || (i.src = "media/buttons/mroegames.png"),
                i.href || (i.href = "javascript:void(0);"),
                i.addEventListener("touchend", e.action),
                i.setAttribute("id", "spilgames-more-games-btn"),
                this.logoResp = t,
                this.linkResp = i,
                this.hilo = setInterval(this.loadSponsor2.bind(this), 30, t, i)
            } else this.logo = null,
            this.todoLoad = !0,
            this.esperarLogo = !1;
            else this.esperarLogo = !1,
            this.todoLoad = !0
        },
        initStage: function() {
            var t = game.Loader.barWidth * game.scale,
            e = game.Loader.barHeight * game.scale;
            this.barBg = new game.Graphics,
            this.barBg.beginFill(game.Loader.barBgColor),
            this.barBg.drawRect(0, 0, t, e),
            this.barBg.position.set(Math.round(game.renderer.width / 2 - t / 2), Math.round(game.renderer.height / 2 - e / 2)),
            this.stage.addChild(this.barBg),
            this.barFg = new game.Graphics,
            this.barFg.beginFill(game.Loader.barColor),
            this.barFg.drawRect(0, 0, t, e),
            this.barFg.position.set(Math.round(game.renderer.width / 2 - t / 2), Math.round(game.renderer.height / 2 - e / 2)),
            this.barFg.scale.x = this.percent / 100,
            this.stage.addChild(this.barFg)
        },
        onComplete: function(t) {
            return ("string" == typeof t || game.System.startScene) && (this.dynamic = !1),
            this.callback = t,
            this
        },
        start: function() {
            if (this.started = !0, !this.dynamic) {
                for (var t = this.stage.children.length - 1; t >= 0; t--) this.stage.removeChild(this.stage.children[t]);
                this.stage.interactive = !1,
                game.tweenEngine && game.tweenEngine.removeAll(),
                this.stage.setBackgroundColor(game.Loader.bgColor),
                this.initStage(),
                game.scene ? game.scene = this: this.loopId = game.setGameLoop(this.run.bind(this), game.system.canvas)
            }
            this.startTime = Date.now(),
            this.assetQueue.length > 0 ? this.loader.load() : this.audioQueue.length > 0 ? this.loadAudio() : this.dynamic && this.ready()
        },
        error: function(t) {
            throw "loading file " + t
        },
        progress: function(t) {
            t && t.json && (game.json[t.url] = t.json),
            this.loaded++,
            this.percent = Math.round(this.loaded / (this.assetQueue.length + this.audioQueue.length) * 100),
            this.onPercentChange(),
            this.dynamic && this.loaded === this.assetQueue.length + this.audioQueue.length && this.ready()
        },
        onPercentChange: function() {
            this.barFg && (this.barFg.scale.x = this.percent / 100)
        },
        loadAudio: function() {
            for (var t = this.audioQueue.length - 1; t >= 0; t--) game.audio._load(this.audioQueue[t], this.progress.bind(this), this.error.bind(this, this.audioQueue[t]))
        },
        ready: function() {
            if (game.system.hires || game.system.retina) for (var t in game.TextureCache) - 1 !== t.indexOf("@" + game.scale + "x") && (game.TextureCache[t.replace("@" + game.scale + "x", "")] = game.TextureCache[t], delete game.TextureCache[t]);
            "function" == typeof this.callback ? this.callback() : this.setScene()
        },
        setScene: function() {
            if (game.system.timer.last = 0, game.Timer.time = Number.MIN_VALUE, this.loopId && game.clearGameLoop(this.loopId), game.System.startScene) {
                var t = game.System.startScene;
                game.System.startScene = null,
                game.system.setScene(t)
            } else game.system.setScene(this.callback)
        },
        exit: function() {},
        run: function() {
            this.loopId && (this.last = game.Timer.time, game.Timer.update(), game.system.delta = (game.Timer.time - this.last) / 1e3),
            this.update(),
            this.render()
        },
        update: function() {
            if (game.tweenEngine && game.tweenEngine.update(), !this._ready) if (this.timeoutTimer) {
                if (this.timeoutTimer.time() >= 0 && 1 == this.todoLoad) if (1 == this.esperarLogo) {
                    var t = Math.round(W / 2 - .85 * LOGOW / 2) + CENTERX;
                    if (null != Api && null != LOGOimg) {
                        LOGOimg.width = "" + .85 * LOGOW + "px",
                        LOGOimg.height = "" + .85 * LOGOH + "px";
                        var e = window.innerHeight / 2;
                        LOGOimg.top = "" + (e + 383 * SCALE + CENTERY) + "px",
                        LOGOimg.left = null,
                        LOGOimg.left = "" + t + "px",
                        this.esperarLogo = !1
                    }
                } else this._ready = !0,
                this.ready()
            } else if (this.loaded === this.assetQueue.length + this.audioQueue.length) {
                var i = Date.now() - this.startTime,
                s = Math.max(0, game.Loader.time - i);
                this.timeoutTimer = new game.Timer(s)
            }
        },
        render: function() {
            game.system.renderer.render(this.stage)
        },
        getPath: function(t) {
            return game.system.retina || game.system.hires ? t.replace(/\.(?=[^.]*$)/, "@" + game.scale + "x.") : t
        },
        keydown: function() {},
        keyup: function() {}
    }),
    game.addAttributes("Loader", {
        bgColor: 16777215,
        time: 200,
        barBgColor: 5332595,
        barColor: 12172999,
        barWidth: 200,
        barHeight: 20,
        crossorigin: !0
    })
}),
game.module("engine.particle").body(function() {
    game.createClass("Particle", {
        position: null,
        velocity: null,
        sprite: null,
        accel: null,
        init: function() {
            this.position = new game.Point,
            this.velocity = new game.Point,
            this.accel = new game.Point
        },
        setVeloctity: function(t, e) {
            this.velocity.x = Math.cos(t) * e,
            this.velocity.y = Math.sin(t) * e
        },
        setAccel: function(t, e) {
            this.accel.x = Math.cos(t) * e,
            this.accel.y = Math.sin(t) * e
        }
    }),
    game.createClass("Emitter", {
        poolName: "emitter",
        particles: [],
        textures: [],
        container: null,
        position: null,
        positionVar: null,
        angle: 0,
        angleVar: 0,
        speed: 100,
        speedVar: 0,
        life: 2e3,
        lifeVar: 0,
        duration: 0,
        durationTimer: 0,
        rate: 100,
        rateTimer: 0,
        count: 10,
        active: !0,
        velRotate: 0,
        velRotateVar: 0,
        rotate: 0,
        rotateVar: 0,
        startAlpha: 1,
        endAlpha: 1,
        startScale: 1,
        startScaleVar: 0,
        endScale: 1,
        endScaleVar: 0,
        target: null,
        targetForce: 0,
        accelAngle: Math.PI / 2,
        accelAngleVar: 0,
        accelSpeed: 0,
        accelSpeedVar: 0,
        spriteSettings: {
            anchor: {
                x: .5,
                y: .5
            }
        },
        velocityLimit: null,
        callback: null,
        init: function(t) {
            game.pool.create(this.poolName),
            this.position = new game.Point,
            this.positionVar = new game.Point,
            this.velocityLimit = new game.Point,
            this.target = new game.Point,
            game.merge(this, t)
        },
        onComplete: function(t) {
            this.callback = t
        },
        reset: function(t) {
            for (var e in this)"number" == typeof this[e] && (this[e] = game.Emitter.prototype[e]),
            this[e] instanceof game.Point && t && this[e].set(0, 0)
        },
        getVariance: function(t) {
            return Math.random() * t * (Math.random() > .5 ? -1 : 1)
        },
        addParticle: function() {
            var t = game.pool.get(this.poolName);
            t || (t = new game.Particle),
            t.position.x = this.position.x + this.getVariance(this.positionVar.x),
            t.position.y = this.position.y + this.getVariance(this.positionVar.y);
            var e = this.getVariance(this.angleVar),
            i = this.angle + e,
            s = this.speed + this.getVariance(this.speedVar);
            t.setVeloctity(i, s),
            this.angleVar !== this.accelAngleVar && (e = this.getVariance(this.accelAngleVar)),
            i = this.accelAngle + e,
            s = this.accelSpeed + this.getVariance(this.accelSpeedVar),
            t.setAccel(i, s),
            t.life = this.life + this.getVariance(this.lifeVar),
            t.sprite ? (t.sprite.setTexture(this.textures.random()), t.sprite.position.x = t.position.x, t.sprite.position.y = t.position.y, t.sprite.rotation = 0) : t.sprite = new game.Sprite(this.textures.random(), t.position.x, t.position.y, this.spriteSettings),
            t.rotate = this.rotate + this.getVariance(this.rotateVar),
            t.velRotate = this.velRotate + this.getVariance(this.velRotateVar),
            this.startAlpha !== this.endAlpha ? (t.deltaAlpha = this.endAlpha - this.startAlpha, t.deltaAlpha /= t.life / 1e3) : t.deltaAlpha = 0,
            t.sprite.alpha = this.startAlpha;
            var a = this.startScale + this.getVariance(this.startScaleVar);
            this.startScale !== this.endScale ? (t.deltaScale = this.endScale + this.getVariance(this.endScaleVar) - a, t.deltaScale /= t.life / 1e3) : t.deltaScale = 0,
            t.sprite.scale.x = t.sprite.scale.y = a,
            this.container && this.container.addChild(t.sprite),
            this.particles.push(t)
        },
        updateParticle: function(t) {
            if (t.life > 0 && (t.life -= 1e3 * game.system.delta, t.life <= 0)) return this.removeParticle(t);
            if (this.targetForce > 0) {
                t.accel.set(this.target.x - t.position.x, this.target.y - t.position.y);
                var e = Math.sqrt(t.accel.x * t.accel.x + t.accel.y * t.accel.y);
                t.accel.x /= e || 1,
                t.accel.y /= e || 1,
                t.accel.x *= this.targetForce,
                t.accel.y *= this.targetForce
            }
            if (t.velocity.x += t.accel.x * game.system.delta, t.velocity.y += t.accel.y * game.system.delta, (this.velocityLimit.x > 0 || this.velocityLimit.y > 0) && (t.velocity.x = t.velocity.x.limit( - this.velocityLimit.x, this.velocityLimit.x), t.velocity.y = t.velocity.y.limit( - this.velocityLimit.y, this.velocityLimit.y)), t.velRotate) {
                var i = Math.cos(t.velRotate * game.system.delta),
                s = Math.sin(t.velRotate * game.system.delta),
                a = t.velocity.x * i - t.velocity.y * s,
                r = t.velocity.y * i + t.velocity.x * s;
                t.velocity.set(a, r)
            }
            t.position.x += t.velocity.x * game.scale * game.system.delta,
            t.position.y += t.velocity.y * game.scale * game.system.delta,
            t.deltaAlpha && (t.sprite.alpha = Math.max(0, t.sprite.alpha + t.deltaAlpha * game.system.delta)),
            t.deltaScale && (t.sprite.scale.x = t.sprite.scale.y += t.deltaScale * game.system.delta),
            t.sprite.rotation += t.rotate * game.system.delta,
            t.sprite.position.x = t.position.x,
            t.sprite.position.y = t.position.y
        },
        removeParticle: function(t) {
            t.sprite.parent && t.sprite.parent.removeChild(t.sprite),
            game.pool.put(this.poolName, t),
            this.particles.erase(t)
        },
        emit: function(t) {
            t = t || 1;
            for (var e = 0; t > e; e++) this.addParticle()
        },
        update: function() {
            if (this._remove) for (var t = this.particles.length - 1; t >= 0; t--) this.removeParticle(this.particles[t]);
            else {
                this.durationTimer += 1e3 * game.system.delta,
                this.duration > 0 && (this.active = this.durationTimer < this.duration, this.active || 0 !== this.particles.length || "function" != typeof this.callback || (this.callback(), this.callback = null)),
                this.rate && this.active && (this.rateTimer += 1e3 * game.system.delta, this.rateTimer >= this.rate && (this.rateTimer = 0, this.emit(this.count)));
                for (var t = this.particles.length - 1; t >= 0; t--) this.updateParticle(this.particles[t])
            }
        },
        remove: function() {
            this._remove = !0
        },
        addTo: function(t) {
            this.container = t
        }
    })
}),
game.module("engine.geometry").body(function() {
    game.createClass("Vector", {
        x: 0,
        y: 0,
        init: function(t, e) {
            "number" == typeof t && (this.x = t),
            "number" == typeof e && (this.y = e)
        },
        set: function(t, e) {
            return this.x = t,
            this.y = e,
            this
        },
        clone: function() {
            return new game.Vector(this.x, this.y)
        },
        copy: function(t) {
            return this.x = t.x,
            this.y = t.y,
            this
        },
        add: function(t, e) {
            return this.x += t instanceof game.Vector ? t.x: t,
            this.y += t instanceof game.Vector ? t.y: e || t,
            this
        },
        subtract: function(t, e) {
            return this.x -= t instanceof game.Vector ? t.x: t,
            this.y -= t instanceof game.Vector ? t.y: e || t,
            this
        },
        multiply: function(t, e) {
            return this.x *= t instanceof game.Vector ? t.x: t,
            this.y *= t instanceof game.Vector ? t.y: e || t,
            this
        },
        multiplyAdd: function(t, e) {
            return this.x += t instanceof game.Vector ? t.x * e: t * e,
            this.y += t instanceof game.Vector ? t.y * e: t * e,
            this
        },
        divide: function(t, e) {
            return this.x /= t instanceof game.Vector ? t.x: t,
            this.y /= t instanceof game.Vector ? t.y: e || t,
            this
        },
        distance: function(t) {
            var e = t.x - this.x,
            i = t.y - this.y;
            return Math.sqrt(e * e + i * i)
        },
        length: function() {
            return Math.sqrt(this.dot())
        },
        dot: function(t) {
            return t instanceof game.Vector ? this.x * t.x + this.y * t.y: this.x * this.x + this.y * this.y
        },
        dotNormalized: function(t) {
            var e = this.length(),
            i = this.x / e,
            s = this.y / e;
            if (t instanceof game.Vector) {
                var a = t.length(),
                r = t.x / a,
                n = t.y / a;
                return i * r + s * n
            }
            return i * i + s * s
        },
        rotate: function(t) {
            var e = Math.cos(t),
            i = Math.sin(t),
            s = this.x * e - this.y * i,
            a = this.y * e + this.x * i;
            return this.x = s,
            this.y = a,
            this
        },
        normalize: function() {
            var t = this.length();
            return this.x /= t || 1,
            this.y /= t || 1,
            this
        },
        limit: function(t) {
            return this.x = this.x.limit( - t.x, t.x),
            this.y = this.y.limit( - t.y, t.y),
            this
        },
        angle: function(t) {
            return Math.atan2(t.y - this.y, t.x - this.x)
        },
        angleFromOrigin: function(t) {
            return Math.atan2(t.y, t.x) - Math.atan2(this.y, this.x)
        },
        round: function() {
            return this.x = Math.round(this.x),
            this.y = Math.round(this.y),
            this
        }
    })
}),
game.module("engine.physics").require("engine.geometry").body(function() {
    game.createClass("World", {
        gravity: null,
        solver: null,
        bodies: [],
        collisionGroups: {},
        init: function(t, e) {
            t = "number" == typeof t ? t: 0,
            e = "number" == typeof e ? e: 980,
            this.gravity = new game.Vector(t, e),
            this.solver = new game.CollisionSolver
        },
        addBody: function(t) {
            t.world = this,
            t._remove = !1,
            this.bodies.push(t),
            this.addBodyCollision(t)
        },
        removeBody: function(t) {
            t.world && (t.world = null, t._remove = !0)
        },
        addBodyCollision: function(t) {
            "number" == typeof t.collisionGroup && (this.collisionGroups[t.collisionGroup] = this.collisionGroups[t.collisionGroup] || [], -1 === this.collisionGroups[t.collisionGroup].indexOf(t) && this.collisionGroups[t.collisionGroup].push(t))
        },
        removeBodyCollision: function(t) {
            "number" == typeof t.collisionGroup && this.collisionGroups[t.collisionGroup] && -1 !== this.collisionGroups[t.collisionGroup].indexOf(t) && this.collisionGroups[t.collisionGroup].erase(t)
        },
        collide: function(t) {
            var e, i, s, a;
            for (e = 0; e < t.collideAgainst.length; e++) if (t._collides.length = 0, a = this.collisionGroups[t.collideAgainst[e]]) {
                for (i = a.length - 1; i >= 0 && a; i--) s = a[i],
                t !== s && this.solver.hitTest(t, s) && t._collides.push(s);
                for (i = t._collides.length - 1; i >= 0; i--) this.solver.hitResponse(t, t._collides[i]) && t.afterCollide(t._collides[i])
            }
        },
        update: function() {
            var t, e;
            for (t = this.bodies.length - 1; t >= 0; t--) this.bodies[t]._remove ? (this.removeBodyCollision(this.bodies[t]), this.bodies.splice(t, 1)) : this.bodies[t].update();
            for (t in this.collisionGroups) if (0 !== this.collisionGroups[t].length) for (e = this.collisionGroups[t].length - 1; e >= 0; e--) this.collisionGroups[t][e] && this.collisionGroups[t][e].collideAgainst.length > 0 && this.collide(this.collisionGroups[t][e]);
            else delete this.collisionGroups[t]
        }
    }),
    game.createClass("CollisionSolver", {
        hitTest: function(t, e) {
            if (t.shape.width && e.shape.width) return ! (t.position.y + t.shape.height / 2 <= e.position.y - e.shape.height / 2 || t.position.y - t.shape.height / 2 >= e.position.y + e.shape.height / 2 || t.position.x - t.shape.width / 2 >= e.position.x + e.shape.width / 2 || t.position.x + t.shape.width / 2 <= e.position.x - e.shape.width / 2);
            if (t.shape.radius && e.shape.radius) return t.shape.radius + e.shape.radius > t.position.distance(e.position);
            if (t.shape.width && e.shape.radius || t.shape.radius && e.shape.width) {
                var i = t.shape.width ? t: e,
                s = t.shape.radius ? t: e,
                a = Math.max(i.position.x - i.shape.width / 2, Math.min(i.position.x + i.shape.width / 2, s.position.x)),
                r = Math.max(i.position.y - i.shape.height / 2, Math.min(i.position.y + i.shape.height / 2, s.position.y)),
                n = Math.pow(s.position.x - a, 2) + Math.pow(s.position.y - r, 2);
                return n < s.shape.radius * s.shape.radius
            }
            return ! 1
        },
        hitResponse: function(t, e) {
            if (t.shape.width && e.shape.width) {
                if (t.last.y + t.shape.height / 2 <= e.last.y - e.shape.height / 2) {
                    if (t.collide(e, "DOWN")) return t.position.y = e.position.y - e.shape.height / 2 - t.shape.height / 2,
                    !0
                } else if (t.last.y - t.shape.height / 2 >= e.last.y + e.shape.height / 2) {
                    if (t.collide(e, "UP")) return t.position.y = e.position.y + e.shape.height / 2 + t.shape.height / 2,
                    !0
                } else if (t.last.x + t.shape.width / 2 <= e.last.x - e.shape.width / 2) {
                    if (t.collide(e, "RIGHT")) return t.position.x = e.position.x - e.shape.width / 2 - t.shape.width / 2,
                    !0
                } else if (t.last.x - t.shape.width / 2 >= e.last.x + e.shape.width / 2) {
                    if (t.collide(e, "LEFT")) return t.position.x = e.position.x + e.shape.width / 2 + t.shape.width / 2,
                    !0
                } else if (t.collide(e)) return ! 0
            } else if (t.shape.radius && e.shape.radius) {
                var i = e.position.angle(t.position);
                if (t.collide(e, i)) {
                    var s = t.shape.radius + e.shape.radius;
                    return t.position.x = e.position.x + Math.cos(i) * s,
                    t.position.y = e.position.y + Math.sin(i) * s,
                    !0
                }
            }
        }
    }),
    game.createClass("Body", {
        world: null,
        shape: null,
        position: null,
        last: null,
        velocity: null,
        velocityLimit: null,
        mass: 0,
        collisionGroup: null,
        collideAgainst: [],
        force: null,
        damping: 0,
        _collides: [],
        init: function(t) {
            this.position = new game.Vector,
            this.velocity = new game.Vector,
            this.velocityLimit = new game.Vector,
            this.last = new game.Vector,
            this.force = new game.Vector,
            game.merge(this, t)
        },
        addShape: function(t) {
            return this.shape = t,
            this
        },
        collide: function() {
            return ! 0
        },
        afterCollide: function() {},
        setCollisionGroup: function(t) {
            this.world && "number" == typeof this.collisionGroup && this.world.removeBodyCollision(this),
            this.collisionGroup = t,
            this.world && this.world.addBodyCollision(this)
        },
        setCollideAgainst: function() {
            this.collideAgainst.length = 0;
            for (var t = 0; t < arguments.length; t++) this.collideAgainst.push(arguments[t])
        },
        addTo: function(t) {
            return this.world ? void 0 : (t.addBody(this), this)
        },
        remove: function() {
            this.world && this.world.removeBody(this)
        },
        removeCollision: function() {
            this.world && this.world.removeBodyCollision(this)
        },
        update: function() {
            this.last.copy(this.position),
            0 !== this.mass && this.velocity.multiplyAdd(this.world.gravity, this.mass * game.system.delta),
            this.velocity.multiplyAdd(this.force, game.system.delta),
            this.damping > 0 && this.damping < 1 && this.velocity.multiply(Math.pow(1 - this.damping, game.system.delta)),
            this.velocityLimit.x > 0 && (this.velocity.x = this.velocity.x.limit( - this.velocityLimit.x, this.velocityLimit.x)),
            this.velocityLimit.y > 0 && (this.velocity.y = this.velocity.y.limit( - this.velocityLimit.y, this.velocityLimit.y)),
            this.position.multiplyAdd(this.velocity, game.scale * game.system.delta)
        }
    }),
    game.createClass("Rectangle", {
        width: 50,
        height: 50,
        init: function(t, e) {
            this.width = t || this.width * game.scale,
            this.height = e || this.height * game.scale
        }
    }),
    game.createClass("Circle", {
        radius: 50,
        init: function(t) {
            this.radius = t || this.radius * game.scale
        }
    })
}),
game.module("engine.pixi").body(function() { (function() {
        var t = game,
        e = e || {};
        e.WEBGL_RENDERER = 0,
        e.CANVAS_RENDERER = 1,
        e.VERSION = "v2.2.9",
        e.blendModes = {
            NORMAL: 0,
            ADD: 1,
            MULTIPLY: 2,
            SCREEN: 3,
            OVERLAY: 4,
            DARKEN: 5,
            LIGHTEN: 6,
            COLOR_DODGE: 7,
            COLOR_BURN: 8,
            HARD_LIGHT: 9,
            SOFT_LIGHT: 10,
            DIFFERENCE: 11,
            EXCLUSION: 12,
            HUE: 13,
            SATURATION: 14,
            COLOR: 15,
            LUMINOSITY: 16
        },
        e.scaleModes = {
            DEFAULT: 0,
            LINEAR: 0,
            NEAREST: 1
        },
        e._UID = 0,
        "undefined" != typeof Float32Array ? (e.Float32Array = Float32Array, e.Uint16Array = Uint16Array, e.Uint32Array = Uint32Array, e.ArrayBuffer = ArrayBuffer) : (e.Float32Array = Array, e.Uint16Array = Array),
        e.INTERACTION_FREQUENCY = 30,
        e.AUTO_PREVENT_DEFAULT = !0,
        e.PI_2 = 2 * Math.PI,
        e.RAD_TO_DEG = 180 / Math.PI,
        e.DEG_TO_RAD = Math.PI / 180,
        e.RETINA_PREFIX = "@2x",
        e.dontSayHello = !1,
        e.defaultRenderOptions = {
            view: null,
            transparent: !1,
            antialias: !1,
            preserveDrawingBuffer: !1,
            resolution: 1,
            clearBeforeRender: !0,
            autoResize: !1
        },
        e.sayHello = function(t) {
            if (!e.dontSayHello) {
                if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) {
                    var i = ["%c %c %c Pixi.js " + e.VERSION + " - " + t + "  %c  %c  http://www.pixijs.com/  %c %c ♥%c♥%c♥ ", "background: #ff66a5", "background: #ff66a5", "color: #ff66a5; background: #030307;", "background: #ff66a5", "background: #ffc3dc", "background: #ff66a5", "color: #ff2424; background: #fff", "color: #ff2424; background: #fff", "color: #ff2424; background: #fff"];
                    console.log.apply(console, i)
                } else window.console && console.log("Pixi.js " + e.VERSION + " - http://www.pixijs.com/");
                e.dontSayHello = !0
            }
        },
        e.Point = function(t, e) {
            this.x = t || 0,
            this.y = e || 0
        },
        e.Point.prototype.clone = function() {
            return new e.Point(this.x, this.y)
        },
        e.Point.prototype.set = function(t, e) {
            this.x = t || 0,
            this.y = e || (0 !== e ? this.x: 0)
        },
        e.Point.prototype.constructor = e.Point,
        e.Rectangle = function(t, e, i, s) {
            this.x = t || 0,
            this.y = e || 0,
            this.width = i || 0,
            this.height = s || 0
        },
        e.Rectangle.prototype.clone = function() {
            return new e.Rectangle(this.x, this.y, this.width, this.height)
        },
        e.Rectangle.prototype.contains = function(t, e) {
            if (this.width <= 0 || this.height <= 0) return ! 1;
            var i = this.x;
            if (t >= i && t <= i + this.width) {
                var s = this.y;
                if (e >= s && e <= s + this.height) return ! 0
            }
            return ! 1
        },
        e.Rectangle.prototype.constructor = e.Rectangle,
        e.EmptyRectangle = new e.Rectangle(0, 0, 0, 0),
        e.Polygon = function(t) {
            if (t instanceof Array || (t = Array.prototype.slice.call(arguments)), t[0] instanceof e.Point) {
                for (var i = [], s = 0, a = t.length; a > s; s++) i.push(t[s].x, t[s].y);
                t = i
            }
            this.closed = !0,
            this.points = t
        },
        e.Polygon.prototype.clone = function() {
            var t = this.points.slice();
            return new e.Polygon(t)
        },
        e.Polygon.prototype.contains = function(t, e) {
            for (var i = !1,
            s = this.points.length / 2,
            a = 0,
            r = s - 1; s > a; r = a++) {
                var n = this.points[2 * a],
                o = this.points[2 * a + 1],
                h = this.points[2 * r],
                l = this.points[2 * r + 1],
                d = o > e != l > e && (h - n) * (e - o) / (l - o) + n > t;
                d && (i = !i)
            }
            return i
        },
        e.Polygon.prototype.constructor = e.Polygon,
        e.Circle = function(t, e, i) {
            this.x = t || 0,
            this.y = e || 0,
            this.radius = i || 0
        },
        e.Circle.prototype.clone = function() {
            return new e.Circle(this.x, this.y, this.radius)
        },
        e.Circle.prototype.contains = function(t, e) {
            if (this.radius <= 0) return ! 1;
            var i = this.x - t,
            s = this.y - e,
            a = this.radius * this.radius;
            return i *= i,
            s *= s,
            a >= i + s
        },
        e.Circle.prototype.getBounds = function() {
            return new e.Rectangle(this.x - this.radius, this.y - this.radius, 2 * this.radius, 2 * this.radius)
        },
        e.Circle.prototype.constructor = e.Circle,
        e.Ellipse = function(t, e, i, s) {
            this.x = t || 0,
            this.y = e || 0,
            this.width = i || 0,
            this.height = s || 0
        },
        e.Ellipse.prototype.clone = function() {
            return new e.Ellipse(this.x, this.y, this.width, this.height)
        },
        e.Ellipse.prototype.contains = function(t, e) {
            if (this.width <= 0 || this.height <= 0) return ! 1;
            var i = (t - this.x) / this.width,
            s = (e - this.y) / this.height;
            return i *= i,
            s *= s,
            1 >= i + s
        },
        e.Ellipse.prototype.getBounds = function() {
            return new e.Rectangle(this.x - this.width, this.y - this.height, this.width, this.height)
        },
        e.Ellipse.prototype.constructor = e.Ellipse,
        e.RoundedRectangle = function(t, e, i, s, a) {
            this.x = t || 0,
            this.y = e || 0,
            this.width = i || 0,
            this.height = s || 0,
            this.radius = a || 20
        },
        e.RoundedRectangle.prototype.clone = function() {
            return new e.RoundedRectangle(this.x, this.y, this.width, this.height, this.radius)
        },
        e.RoundedRectangle.prototype.contains = function(t, e) {
            if (this.width <= 0 || this.height <= 0) return ! 1;
            var i = this.x;
            if (t >= i && t <= i + this.width) {
                var s = this.y;
                if (e >= s && e <= s + this.height) return ! 0
            }
            return ! 1
        },
        e.RoundedRectangle.prototype.constructor = e.RoundedRectangle,
        e.Matrix = function() {
            this.a = 1,
            this.b = 0,
            this.c = 0,
            this.d = 1,
            this.tx = 0,
            this.ty = 0
        },
        e.Matrix.prototype.fromArray = function(t) {
            this.a = t[0],
            this.b = t[1],
            this.c = t[3],
            this.d = t[4],
            this.tx = t[2],
            this.ty = t[5]
        },
        e.Matrix.prototype.toArray = function(t) {
            this.array || (this.array = new e.Float32Array(9));
            var i = this.array;
            return t ? (i[0] = this.a, i[1] = this.b, i[2] = 0, i[3] = this.c, i[4] = this.d, i[5] = 0, i[6] = this.tx, i[7] = this.ty, i[8] = 1) : (i[0] = this.a, i[1] = this.c, i[2] = this.tx, i[3] = this.b, i[4] = this.d, i[5] = this.ty, i[6] = 0, i[7] = 0, i[8] = 1),
            i
        },
        e.Matrix.prototype.apply = function(t, i) {
            return i = i || new e.Point,
            i.x = this.a * t.x + this.c * t.y + this.tx,
            i.y = this.b * t.x + this.d * t.y + this.ty,
            i
        },
        e.Matrix.prototype.applyInverse = function(t, i) {
            i = i || new e.Point;
            var s = 1 / (this.a * this.d + this.c * -this.b);
            return i.x = this.d * s * t.x + -this.c * s * t.y + (this.ty * this.c - this.tx * this.d) * s,
            i.y = this.a * s * t.y + -this.b * s * t.x + ( - this.ty * this.a + this.tx * this.b) * s,
            i
        },
        e.Matrix.prototype.translate = function(t, e) {
            return this.tx += t,
            this.ty += e,
            this
        },
        e.Matrix.prototype.scale = function(t, e) {
            return this.a *= t,
            this.d *= e,
            this.c *= t,
            this.b *= e,
            this.tx *= t,
            this.ty *= e,
            this
        },
        e.Matrix.prototype.rotate = function(t) {
            var e = Math.cos(t),
            i = Math.sin(t),
            s = this.a,
            a = this.c,
            r = this.tx;
            return this.a = s * e - this.b * i,
            this.b = s * i + this.b * e,
            this.c = a * e - this.d * i,
            this.d = a * i + this.d * e,
            this.tx = r * e - this.ty * i,
            this.ty = r * i + this.ty * e,
            this
        },
        e.Matrix.prototype.append = function(t) {
            var e = this.a,
            i = this.b,
            s = this.c,
            a = this.d;
            return this.a = t.a * e + t.b * s,
            this.b = t.a * i + t.b * a,
            this.c = t.c * e + t.d * s,
            this.d = t.c * i + t.d * a,
            this.tx = t.tx * e + t.ty * s + this.tx,
            this.ty = t.tx * i + t.ty * a + this.ty,
            this
        },
        e.Matrix.prototype.identity = function() {
            return this.a = 1,
            this.b = 0,
            this.c = 0,
            this.d = 1,
            this.tx = 0,
            this.ty = 0,
            this
        },
        e.identityMatrix = new e.Matrix,
        e.DisplayObject = function() {
            this.position = new e.Point,
            this.scale = new e.Point(1, 1),
            this.pivot = new e.Point(0, 0),
            this.rotation = 0,
            this.alpha = 1,
            this.visible = !0,
            this.hitArea = null,
            this.buttonMode = !1,
            this.renderable = !1,
            this.parent = null,
            this.stage = null,
            this.worldAlpha = 1,
            this._interactive = !1,
            this.defaultCursor = "pointer",
            this.worldTransform = new e.Matrix,
            this._sr = 0,
            this._cr = 1,
            this.filterArea = null,
            this._bounds = new e.Rectangle(0, 0, 1, 1),
            this._currentBounds = null,
            this._mask = null,
            this._cacheAsBitmap = !1,
            this._cacheIsDirty = !1
        },
        e.DisplayObject.prototype.constructor = e.DisplayObject,
        Object.defineProperty(e.DisplayObject.prototype, "interactive", {
            get: function() {
                return this._interactive
            },
            set: function(t) {
                this._interactive = t,
                this.stage && (this.stage.dirty = !0)
            }
        }),
        Object.defineProperty(e.DisplayObject.prototype, "worldVisible", {
            get: function() {
                var t = this;
                do {
                    if (!t.visible) return ! 1;
                    t = t.parent
                } while ( t );
                return ! 0
            }
        }),
        Object.defineProperty(e.DisplayObject.prototype, "mask", {
            get: function() {
                return this._mask
            },
            set: function(t) {
                this._mask && (this._mask.isMask = !1),
                this._mask = t,
                this._mask && (this._mask.isMask = !0)
            }
        }),
        Object.defineProperty(e.DisplayObject.prototype, "filters", {
            get: function() {
                return this._filters
            },
            set: function(t) {
                if (t) {
                    for (var e = [], i = 0; i < t.length; i++) for (var s = t[i].passes, a = 0; a < s.length; a++) e.push(s[a]);
                    this._filterBlock = {
                        target: this,
                        filterPasses: e
                    }
                }
                this._filters = t
            }
        }),
        Object.defineProperty(e.DisplayObject.prototype, "cacheAsBitmap", {
            get: function() {
                return this._cacheAsBitmap
            },
            set: function(t) {
                this._cacheAsBitmap !== t && (t ? this._generateCachedSprite() : this._destroyCachedSprite(), this._cacheAsBitmap = t)
            }
        }),
        e.DisplayObject.prototype.updateTransform = function() {
            var t, i, s, a, r, n, o = this.parent.worldTransform,
            h = this.worldTransform;
            this.rotation % e.PI_2 ? (this.rotation !== this.rotationCache && (this.rotationCache = this.rotation, this._sr = Math.sin(this.rotation), this._cr = Math.cos(this.rotation)), t = this._cr * this.scale.x, i = this._sr * this.scale.x, s = -this._sr * this.scale.y, a = this._cr * this.scale.y, r = this.position.x, n = this.position.y, (this.pivot.x || this.pivot.y) && (r -= this.pivot.x * t + this.pivot.y * s, n -= this.pivot.x * i + this.pivot.y * a), h.a = t * o.a + i * o.c, h.b = t * o.b + i * o.d, h.c = s * o.a + a * o.c, h.d = s * o.b + a * o.d, h.tx = r * o.a + n * o.c + o.tx, h.ty = r * o.b + n * o.d + o.ty) : (t = this.scale.x, a = this.scale.y, r = this.position.x - this.pivot.x * t, n = this.position.y - this.pivot.y * a, h.a = t * o.a, h.b = t * o.b, h.c = a * o.c, h.d = a * o.d, h.tx = r * o.a + n * o.c + o.tx, h.ty = r * o.b + n * o.d + o.ty),
            this.worldAlpha = this.alpha * this.parent.worldAlpha
        },
        e.DisplayObject.prototype.displayObjectUpdateTransform = e.DisplayObject.prototype.updateTransform,
        e.DisplayObject.prototype.getBounds = function(t) {
            return t = t,
            e.EmptyRectangle
        },
        e.DisplayObject.prototype.getLocalBounds = function() {
            return this.getBounds(e.identityMatrix)
        },
        e.DisplayObject.prototype.setStageReference = function(t) {
            this.stage = t,
            this._interactive && (this.stage.dirty = !0)
        },
        e.DisplayObject.prototype.generateTexture = function(t, i, s) {
            var a = this.getLocalBounds(),
            r = new e.RenderTexture(0 | a.width, 0 | a.height, s, i, t);
            return e.DisplayObject._tempMatrix.tx = -a.x,
            e.DisplayObject._tempMatrix.ty = -a.y,
            r.render(this, e.DisplayObject._tempMatrix),
            r
        },
        e.DisplayObject.prototype.updateCache = function() {
            this._generateCachedSprite()
        },
        e.DisplayObject.prototype.toGlobal = function(t) {
            return this.displayObjectUpdateTransform(),
            this.worldTransform.apply(t)
        },
        e.DisplayObject.prototype.toLocal = function(t, e) {
            return e && (t = e.toGlobal(t)),
            this.displayObjectUpdateTransform(),
            this.worldTransform.applyInverse(t)
        },
        e.DisplayObject.prototype._renderCachedSprite = function(t) {
            this._cachedSprite.worldAlpha = this.worldAlpha,
            t.gl ? e.Sprite.prototype._renderWebGL.call(this._cachedSprite, t) : e.Sprite.prototype._renderCanvas.call(this._cachedSprite, t)
        },
        e.DisplayObject.prototype._generateCachedSprite = function() {
            this._cacheAsBitmap = !1;
            var t = this.getLocalBounds();
            if (this._cachedSprite) this._cachedSprite.texture.resize(0 | t.width, 0 | t.height);
            else {
                var i = new e.RenderTexture(0 | t.width, 0 | t.height);
                this._cachedSprite = new e.Sprite(i),
                this._cachedSprite.worldTransform = this.worldTransform
            }
            var s = this._filters;
            this._filters = null,
            this._cachedSprite.filters = s,
            e.DisplayObject._tempMatrix.tx = -t.x,
            e.DisplayObject._tempMatrix.ty = -t.y,
            this._cachedSprite.texture.render(this, e.DisplayObject._tempMatrix, !0),
            this._cachedSprite.anchor.x = -(t.x / t.width),
            this._cachedSprite.anchor.y = -(t.y / t.height),
            this._filters = s,
            this._cacheAsBitmap = !0
        },
        e.DisplayObject.prototype._destroyCachedSprite = function() {
            this._cachedSprite && (this._cachedSprite.texture.destroy(!0), this._cachedSprite = null)
        },
        e.DisplayObject.prototype._renderWebGL = function(t) {
            t = t
        },
        e.DisplayObject.prototype._renderCanvas = function(t) {
            t = t
        },
        e.DisplayObject._tempMatrix = new e.Matrix,
        Object.defineProperty(e.DisplayObject.prototype, "x", {
            get: function() {
                return this.position.x
            },
            set: function(t) {
                this.position.x = t
            }
        }),
        Object.defineProperty(e.DisplayObject.prototype, "y", {
            get: function() {
                return this.position.y
            },
            set: function(t) {
                this.position.y = t
            }
        }),
        e.DisplayObjectContainer = function() {
            e.DisplayObject.call(this),
            this.children = []
        },
        e.DisplayObjectContainer.prototype = Object.create(e.DisplayObject.prototype),
        e.DisplayObjectContainer.prototype.constructor = e.DisplayObjectContainer,
        Object.defineProperty(e.DisplayObjectContainer.prototype, "width", {
            get: function() {
                return this.scale.x * this.getLocalBounds().width
            },
            set: function(t) {
                var e = this.getLocalBounds().width;
                0 !== e ? this.scale.x = t / e: this.scale.x = 1,
                this._width = t
            }
        }),
        Object.defineProperty(e.DisplayObjectContainer.prototype, "height", {
            get: function() {
                return this.scale.y * this.getLocalBounds().height
            },
            set: function(t) {
                var e = this.getLocalBounds().height;
                0 !== e ? this.scale.y = t / e: this.scale.y = 1,
                this._height = t
            }
        }),
        e.DisplayObjectContainer.prototype.addChild = function(t) {
            return this.addChildAt(t, this.children.length)
        },
        e.DisplayObjectContainer.prototype.addChildAt = function(t, e) {
            if (e >= 0 && e <= this.children.length) return t.parent && t.parent.removeChild(t),
            t.parent = this,
            this.children.splice(e, 0, t),
            this.stage && t.setStageReference(this.stage),
            t;
            throw new Error(t + "addChildAt: The index " + e + " supplied is out of bounds " + this.children.length)
        },
        e.DisplayObjectContainer.prototype.swapChildren = function(t, e) {
            if (t !== e) {
                var i = this.getChildIndex(t),
                s = this.getChildIndex(e);
                if (0 > i || 0 > s) throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");
                this.children[i] = e,
                this.children[s] = t
            }
        },
        e.DisplayObjectContainer.prototype.getChildIndex = function(t) {
            var e = this.children.indexOf(t);
            if ( - 1 === e) throw new Error("The supplied DisplayObject must be a child of the caller");
            return e
        },
        e.DisplayObjectContainer.prototype.setChildIndex = function(t, e) {
            if (0 > e || e >= this.children.length) throw new Error("The supplied index is out of bounds");
            var i = this.getChildIndex(t);
            this.children.splice(i, 1),
            this.children.splice(e, 0, t)
        },
        e.DisplayObjectContainer.prototype.getChildAt = function(t) {
            if (0 > t || t >= this.children.length) throw new Error("getChildAt: Supplied index " + t + " does not exist in the child list, or the supplied DisplayObject must be a child of the caller");
            return this.children[t]
        },
        e.DisplayObjectContainer.prototype.removeChild = function(t) {
            var e = this.children.indexOf(t);
            if ( - 1 !== e) return this.removeChildAt(e)
        },
        e.DisplayObjectContainer.prototype.removeChildAt = function(t) {
            var e = this.getChildAt(t);
            return this.stage && e.removeStageReference(),
            e.parent = void 0,
            this.children.splice(t, 1),
            e
        },
        e.DisplayObjectContainer.prototype.removeChildren = function(t, e) {
            var i = t || 0,
            s = "number" == typeof e ? e: this.children.length,
            a = s - i;
            if (a > 0 && s >= a) {
                for (var r = this.children.splice(i, a), n = 0; n < r.length; n++) {
                    var o = r[n];
                    this.stage && o.removeStageReference(),
                    o.parent = void 0
                }
                return r
            }
            if (0 === a && 0 === this.children.length) return [];
            throw new Error("removeChildren: Range Error, numeric values are outside the acceptable range")
        },
        e.DisplayObjectContainer.prototype.updateTransform = function() {
            if (this.visible && (this.displayObjectUpdateTransform(), !this._cacheAsBitmap)) for (var t = 0,
            e = this.children.length; e > t; t++) this.children[t].updateTransform()
        },
        e.DisplayObjectContainer.prototype.displayObjectContainerUpdateTransform = e.DisplayObjectContainer.prototype.updateTransform,
        e.DisplayObjectContainer.prototype.getBounds = function() {
            if (0 === this.children.length) return e.EmptyRectangle;
            for (var t, i, s, a = 1 / 0,
            r = 1 / 0,
            n = -(1 / 0), o = -(1 / 0), h = !1, l = 0, d = this.children.length; d > l; l++) {
                var u = this.children[l];
                u.visible && (h = !0, t = this.children[l].getBounds(), a = a < t.x ? a: t.x, r = r < t.y ? r: t.y, i = t.width + t.x, s = t.height + t.y, n = n > i ? n: i, o = o > s ? o: s)
            }
            if (!h) return e.EmptyRectangle;
            var c = this._bounds;
            return c.x = a,
            c.y = r,
            c.width = n - a,
            c.height = o - r,
            c
        },
        e.DisplayObjectContainer.prototype.getLocalBounds = function() {
            var t = this.worldTransform;
            this.worldTransform = e.identityMatrix;
            for (var i = 0,
            s = this.children.length; s > i; i++) this.children[i].updateTransform();
            var a = this.getBounds();
            return this.worldTransform = t,
            a
        },
        e.DisplayObjectContainer.prototype.setStageReference = function(t) {
            this.stage = t,
            this._interactive && (this.stage.dirty = !0);
            for (var e = 0,
            i = this.children.length; i > e; e++) {
                var s = this.children[e];
                s.setStageReference(t)
            }
        },
        e.DisplayObjectContainer.prototype.removeStageReference = function() {
            for (var t = 0,
            e = this.children.length; e > t; t++) {
                var i = this.children[t];
                i.removeStageReference()
            }
            this._interactive && (this.stage.dirty = !0),
            this.stage = null
        },
        e.DisplayObjectContainer.prototype._renderWebGL = function(t) {
            if (this.visible && !(this.alpha <= 0)) {
                if (this._cacheAsBitmap) return void this._renderCachedSprite(t);
                var e, i;
                if (this._mask || this._filters) {
                    for (this._filters && (t.spriteBatch.flush(), t.filterManager.pushFilter(this._filterBlock)), this._mask && (t.spriteBatch.stop(), t.maskManager.pushMask(this.mask, t), t.spriteBatch.start()), e = 0, i = this.children.length; i > e; e++) this.children[e]._renderWebGL(t);
                    t.spriteBatch.stop(),
                    this._mask && t.maskManager.popMask(this._mask, t),
                    this._filters && t.filterManager.popFilter(),
                    t.spriteBatch.start()
                } else for (e = 0, i = this.children.length; i > e; e++) this.children[e]._renderWebGL(t)
            }
        },
        e.DisplayObjectContainer.prototype._renderCanvas = function(t) {
            if (this.visible !== !1 && 0 !== this.alpha) {
                if (this._cacheAsBitmap) return void this._renderCachedSprite(t);
                this._mask && t.maskManager.pushMask(this._mask, t);
                for (var e = 0,
                i = this.children.length; i > e; e++) {
                    var s = this.children[e];
                    s._renderCanvas(t)
                }
                this._mask && t.maskManager.popMask(t)
            }
        },
        e.Sprite = function(t) {
            e.DisplayObjectContainer.call(this),
            this.anchor = new e.Point,
            this.texture = t || e.Texture.emptyTexture,
            this._width = 0,
            this._height = 0,
            this.tint = 16777215,
            this.blendMode = e.blendModes.NORMAL,
            this.shader = null,
            this.texture.baseTexture.hasLoaded ? this.onTextureUpdate() : this.texture.on("update", this.onTextureUpdate.bind(this)),
            this.renderable = !0
        },
        e.Sprite.prototype = Object.create(e.DisplayObjectContainer.prototype),
        e.Sprite.prototype.constructor = e.Sprite,
        Object.defineProperty(e.Sprite.prototype, "width", {
            get: function() {
                return this.scale.x * this.texture.frame.width
            },
            set: function(t) {
                this.scale.x = t / this.texture.frame.width,
                this._width = t
            }
        }),
        Object.defineProperty(e.Sprite.prototype, "height", {
            get: function() {
                return this.scale.y * this.texture.frame.height
            },
            set: function(t) {
                this.scale.y = t / this.texture.frame.height,
                this._height = t
            }
        }),
        e.Sprite.prototype.setTexture = function(t) {
            this.texture = t,
            this.cachedTint = 16777215
        },
        e.Sprite.prototype.onTextureUpdate = function() {
            this._width && (this.scale.x = this._width / this.texture.frame.width),
            this._height && (this.scale.y = this._height / this.texture.frame.height)
        },
        e.Sprite.prototype.getBounds = function(t) {
            var e = this.texture.frame.width,
            i = this.texture.frame.height,
            s = e * (1 - this.anchor.x),
            a = e * -this.anchor.x,
            r = i * (1 - this.anchor.y),
            n = i * -this.anchor.y,
            o = t || this.worldTransform,
            h = o.a,
            l = o.b,
            d = o.c,
            u = o.d,
            c = o.tx,
            m = o.ty,
            p = -(1 / 0),
            g = -(1 / 0),
            f = 1 / 0,
            v = 1 / 0;
            if (0 === l && 0 === d) 0 > h && (h *= -1),
            0 > u && (u *= -1),
            f = h * a + c,
            p = h * s + c,
            v = u * n + m,
            g = u * r + m;
            else {
                var x = h * a + d * n + c,
                y = u * n + l * a + m,
                b = h * s + d * n + c,
                w = u * n + l * s + m,
                S = h * s + d * r + c,
                A = u * r + l * s + m,
                P = h * a + d * r + c,
                T = u * r + l * a + m;
                f = f > x ? x: f,
                f = f > b ? b: f,
                f = f > S ? S: f,
                f = f > P ? P: f,
                v = v > y ? y: v,
                v = v > w ? w: v,
                v = v > A ? A: v,
                v = v > T ? T: v,
                p = x > p ? x: p,
                p = b > p ? b: p,
                p = S > p ? S: p,
                p = P > p ? P: p,
                g = y > g ? y: g,
                g = w > g ? w: g,
                g = A > g ? A: g,
                g = T > g ? T: g
            }
            var C = this._bounds;
            return C.x = f,
            C.width = p - f,
            C.y = v,
            C.height = g - v,
            this._currentBounds = C,
            C
        },
        e.Sprite.prototype._renderWebGL = function(t) {
            if (this.visible && !(this.alpha <= 0)) {
                var e, i;
                if (this._mask || this._filters) {
                    var s = t.spriteBatch;
                    for (this._filters && (s.flush(), t.filterManager.pushFilter(this._filterBlock)), this._mask && (s.stop(), t.maskManager.pushMask(this.mask, t), s.start()), s.render(this), e = 0, i = this.children.length; i > e; e++) this.children[e]._renderWebGL(t);
                    s.stop(),
                    this._mask && t.maskManager.popMask(this._mask, t),
                    this._filters && t.filterManager.popFilter(),
                    s.start()
                } else for (t.spriteBatch.render(this), e = 0, i = this.children.length; i > e; e++) this.children[e]._renderWebGL(t)
            }
        },
        e.Sprite.prototype._renderCanvas = function(t) {
            if (! (this.visible === !1 || 0 === this.alpha || this.texture.crop.width <= 0 || this.texture.crop.height <= 0)) {
                if (this.blendMode !== t.currentBlendMode && (t.currentBlendMode = this.blendMode, t.context.globalCompositeOperation = e.blendModesCanvas[t.currentBlendMode]), this._mask && t.maskManager.pushMask(this._mask, t), this.texture.valid) {
                    var i = this.texture.baseTexture.resolution / t.resolution;
                    t.context.globalAlpha = this.worldAlpha,
                    t.smoothProperty && t.scaleMode !== this.texture.baseTexture.scaleMode && (t.scaleMode = this.texture.baseTexture.scaleMode, t.context[t.smoothProperty] = t.scaleMode === e.scaleModes.LINEAR);
                    var s = this.texture.trim ? this.texture.trim.x - this.anchor.x * this.texture.trim.width: this.anchor.x * -this.texture.frame.width,
                    a = this.texture.trim ? this.texture.trim.y - this.anchor.y * this.texture.trim.height: this.anchor.y * -this.texture.frame.height;
                    t.roundPixels ? (t.context.setTransform(this.worldTransform.a, this.worldTransform.b, this.worldTransform.c, this.worldTransform.d, this.worldTransform.tx * t.resolution | 0, this.worldTransform.ty * t.resolution | 0), s = 0 | s, a = 0 | a) : t.context.setTransform(this.worldTransform.a, this.worldTransform.b, this.worldTransform.c, this.worldTransform.d, this.worldTransform.tx * t.resolution, this.worldTransform.ty * t.resolution),
                    16777215 !== this.tint ? (this.cachedTint !== this.tint && (this.cachedTint = this.tint, this.tintedTexture = e.CanvasTinter.getTintedTexture(this, this.tint)), t.context.drawImage(this.tintedTexture, 0, 0, this.texture.crop.width, this.texture.crop.height, s / i, a / i, this.texture.crop.width / i, this.texture.crop.height / i)) : t.context.drawImage(this.texture.baseTexture.source, this.texture.crop.x, this.texture.crop.y, this.texture.crop.width, this.texture.crop.height, s / i, a / i, this.texture.crop.width / i, this.texture.crop.height / i)
                }
                for (var r = 0,
                n = this.children.length; n > r; r++) this.children[r]._renderCanvas(t);
                this._mask && t.maskManager.popMask(t)
            }
        },
        e.Sprite.fromFrame = function(t) {
            var i = e.TextureCache[t];
            if (!i) throw new Error('The frameId "' + t + '" does not exist in the texture cache' + this);
            return new e.Sprite(i)
        },
        e.Sprite.fromImage = function(t, i, s) {
            var a = e.Texture.fromImage(t, i, s);
            return new e.Sprite(a)
        },
        e.SpriteBatch = function(t) {
            e.DisplayObjectContainer.call(this),
            this.textureThing = t,
            this.ready = !1
        },
        e.SpriteBatch.prototype = Object.create(e.DisplayObjectContainer.prototype),
        e.SpriteBatch.prototype.constructor = e.SpriteBatch,
        e.SpriteBatch.prototype.initWebGL = function(t) {
            this.fastSpriteBatch = new e.WebGLFastSpriteBatch(t),
            this.ready = !0
        },
        e.SpriteBatch.prototype.updateTransform = function() {
            this.displayObjectUpdateTransform()
        },
        e.SpriteBatch.prototype._renderWebGL = function(t) { ! this.visible || this.alpha <= 0 || !this.children.length || (this.ready || this.initWebGL(t.gl), this.fastSpriteBatch.gl !== t.gl && this.fastSpriteBatch.setContext(t.gl), t.spriteBatch.stop(), t.shaderManager.setShader(t.shaderManager.fastShader), this.fastSpriteBatch.begin(this, t), this.fastSpriteBatch.render(this), t.spriteBatch.start())
        },
        e.SpriteBatch.prototype._renderCanvas = function(t) {
            if (this.visible && !(this.alpha <= 0) && this.children.length) {
                var e = t.context;
                e.globalAlpha = this.worldAlpha,
                this.displayObjectUpdateTransform();
                for (var i = this.worldTransform,
                s = !0,
                a = 0; a < this.children.length; a++) {
                    var r = this.children[a];
                    if (r.visible) {
                        var n = r.texture,
                        o = n.frame;
                        if (e.globalAlpha = this.worldAlpha * r.alpha, r.rotation % (2 * Math.PI) === 0) s && (e.setTransform(i.a, i.b, i.c, i.d, i.tx, i.ty), s = !1),
                        e.drawImage(n.baseTexture.source, o.x, o.y, o.width, o.height, r.anchor.x * -o.width * r.scale.x + r.position.x + .5 | 0, r.anchor.y * -o.height * r.scale.y + r.position.y + .5 | 0, o.width * r.scale.x, o.height * r.scale.y);
                        else {
                            s || (s = !0),
                            r.displayObjectUpdateTransform();
                            var h = r.worldTransform;
                            t.roundPixels ? e.setTransform(h.a, h.b, h.c, h.d, 0 | h.tx, 0 | h.ty) : e.setTransform(h.a, h.b, h.c, h.d, h.tx, h.ty),
                            e.drawImage(n.baseTexture.source, o.x, o.y, o.width, o.height, r.anchor.x * -o.width + .5 | 0, r.anchor.y * -o.height + .5 | 0, o.width, o.height)
                        }
                    }
                }
            }
        },
        e.MovieClip = function(t) {
            e.Sprite.call(this, t[0]),
            this.textures = t,
            this.animationSpeed = 1,
            this.loop = !0,
            this.onComplete = null,
            this.currentFrame = 0,
            this.playing = !1
        },
        e.MovieClip.prototype = Object.create(e.Sprite.prototype),
        e.MovieClip.prototype.constructor = e.MovieClip,
        Object.defineProperty(e.MovieClip.prototype, "totalFrames", {
            get: function() {
                return this.textures.length
            }
        }),
        e.MovieClip.prototype.stop = function() {
            this.playing = !1
        },
        e.MovieClip.prototype.play = function() {
            this.playing = !0
        },
        e.MovieClip.prototype.gotoAndStop = function(t) {
            this.playing = !1,
            this.currentFrame = t;
            var e = this.currentFrame + .5 | 0;
            this.setTexture(this.textures[e % this.textures.length])
        },
        e.MovieClip.prototype.gotoAndPlay = function(t) {
            this.currentFrame = t,
            this.playing = !0
        },
        e.MovieClip.prototype.updateTransform = function() {
            if (this.displayObjectContainerUpdateTransform(), this.playing) {
                this.currentFrame += this.animationSpeed;
                var t = this.currentFrame + .5 | 0;
                this.currentFrame = this.currentFrame % this.textures.length,
                this.loop || t < this.textures.length ? this.setTexture(this.textures[t % this.textures.length]) : t >= this.textures.length && (this.gotoAndStop(this.textures.length - 1), this.onComplete && this.onComplete())
            }
        },
        e.MovieClip.fromFrames = function(t) {
            for (var i = [], s = 0; s < t.length; s++) i.push(new e.Texture.fromFrame(t[s]));
            return new e.MovieClip(i)
        },
        e.MovieClip.fromImages = function(t) {
            for (var i = [], s = 0; s < t.length; s++) i.push(new e.Texture.fromImage(t[s]));
            return new e.MovieClip(i)
        },
        e.MovieClip.fromSettings = function(t, i, s, a, r) {
            for (var n = [], o = function(t) {
                var e = i;
                return s && (e += s.substring(0, s.length - t.length) + t),
                r && (e += r),
                e
            },
            h = a || 0; t > h; h++) n.push(e.Texture.fromFrame(o(h.toString())));
            return new e.MovieClip(n)
        },
        e.FilterBlock = function() {
            this.visible = !0,
            this.renderable = !0
        },
        e.FilterBlock.prototype.constructor = e.FilterBlock,
        e.Text = function(t, i) {
            this.canvas = document.createElement("canvas"),
            this.context = this.canvas.getContext("2d"),
            this.resolution = 1,
            e.Sprite.call(this, e.Texture.fromCanvas(this.canvas)),
            this.setText(t),
            this.setStyle(i)
        },
        e.Text.prototype = Object.create(e.Sprite.prototype),
        e.Text.prototype.constructor = e.Text,
        Object.defineProperty(e.Text.prototype, "width", {
            get: function() {
                return this.dirty && (this.updateText(), this.dirty = !1),
                this.scale.x * this.texture.frame.width
            },
            set: function(t) {
                this.scale.x = t / this.texture.frame.width,
                this._width = t
            }
        }),
        Object.defineProperty(e.Text.prototype, "height", {
            get: function() {
                return this.dirty && (this.updateText(), this.dirty = !1),
                this.scale.y * this.texture.frame.height
            },
            set: function(t) {
                this.scale.y = t / this.texture.frame.height,
                this._height = t
            }
        }),
        e.Text.prototype.setStyle = function(t) {
            t = t || {},
            t.font = t.font || "bold 20pt Arial",
            t.fill = t.fill || "black",
            t.align = t.align || "left",
            t.stroke = t.stroke || "black",
            t.strokeThickness = t.strokeThickness || 0,
            t.wordWrap = t.wordWrap || !1,
            t.wordWrapWidth = t.wordWrapWidth || 100,
            t.dropShadow = t.dropShadow || !1,
            t.dropShadowAngle = t.dropShadowAngle || Math.PI / 6,
            t.dropShadowDistance = t.dropShadowDistance || 4,
            t.dropShadowColor = t.dropShadowColor || "black",
            t.lineJoin = t.lineJoin || "miter",
            t.lineHeight = t.lineHeight || !1,
            this.style = t,
            this.dirty = !0
        },
        e.Text.prototype.setText = function(t) {
            this.text = t.toString() || " ",
            this.dirty = !0
        },
        e.Text.prototype.updateText = function() {
            this.texture.baseTexture.resolution = this.resolution,
            this.context.font = this.style.font;
            var t = this.text;
            this.style.wordWrap && (t = this.wordWrap(this.text));
            for (var e = t.split(/(?:\r\n|\r|\n)/), i = [], s = 0, a = this.determineFontProperties(this.style.font), r = 0; r < e.length; r++) {
                var n = this.context.measureText(e[r]).width;
                i[r] = n,
                s = Math.max(s, n)
            }
            var o = s + this.style.strokeThickness;
            this.style.dropShadow && (o += this.style.dropShadowDistance),
            this.canvas.width = (o + this.context.lineWidth) * this.resolution;
            var h = this.style.lineHeight || a.fontSize + this.style.strokeThickness,
            l = h * e.length;
            this.style.dropShadow && (l += this.style.dropShadowDistance),
            this.canvas.height = l * this.resolution,
            this.context.scale(this.resolution, this.resolution),
            navigator.isCocoonJS && this.context.clearRect(0, 0, this.canvas.width, this.canvas.height),
            this.context.font = this.style.font,
            this.context.strokeStyle = this.style.stroke,
            this.context.lineWidth = this.style.strokeThickness,
            this.context.textBaseline = "alphabetic",
            this.context.lineJoin = this.style.lineJoin;
            var d, u;
            if (this.style.dropShadow) {
                this.context.fillStyle = this.style.dropShadowColor;
                var c = Math.sin(this.style.dropShadowAngle) * this.style.dropShadowDistance,
                m = Math.cos(this.style.dropShadowAngle) * this.style.dropShadowDistance;
                for (r = 0; r < e.length; r++) d = this.style.strokeThickness / 2,
                u = this.style.strokeThickness / 2 + r * h + a.ascent,
                "right" === this.style.align ? d += s - i[r] : "center" === this.style.align && (d += (s - i[r]) / 2),
                this.style.fill && this.context.fillText(e[r], d + c, u + m)
            }
            for (this.context.fillStyle = this.style.fill, r = 0; r < e.length; r++) d = this.style.strokeThickness / 2,
            u = this.style.strokeThickness / 2 + r * h + a.ascent,
            "right" === this.style.align ? d += s - i[r] : "center" === this.style.align && (d += (s - i[r]) / 2),
            this.style.stroke && this.style.strokeThickness && this.context.strokeText(e[r], d, u),
            this.style.fill && this.context.fillText(e[r], d, u);
            this.updateTexture()
        },
        e.Text.prototype.updateTexture = function() {
            this.texture.baseTexture.width = this.canvas.width,
            this.texture.baseTexture.height = this.canvas.height,
            this.texture.crop.width = this.texture.frame.width = this.canvas.width,
            this.texture.crop.height = this.texture.frame.height = this.canvas.height,
            this._width = this.canvas.width,
            this._height = this.canvas.height,
            this.texture.baseTexture.dirty()
        },
        e.Text.prototype._renderWebGL = function(t) {
            this.dirty && (this.resolution = t.resolution, this.updateText(), this.dirty = !1),
            e.Sprite.prototype._renderWebGL.call(this, t)
        },
        e.Text.prototype._renderCanvas = function(t) {
            this.dirty && (this.resolution = t.resolution, this.updateText(), this.dirty = !1),
            e.Sprite.prototype._renderCanvas.call(this, t)
        },
        e.Text.prototype.determineFontProperties = function(t) {
            var i = e.Text.fontPropertiesCache[t];
            if (!i) {
                i = {};
                var s = e.Text.fontPropertiesCanvas,
                a = e.Text.fontPropertiesContext;
                a.font = t;
                var r = Math.ceil(a.measureText("|Mq").width),
                n = Math.ceil(a.measureText("M").width),
                o = 2 * n;
                n = 1.4 * n | 0,
                s.width = r,
                s.height = o,
                a.fillStyle = "#f00",
                a.fillRect(0, 0, r, o),
                a.font = t,
                a.textBaseline = "alphabetic",
                a.fillStyle = "#000",
                a.fillText("|MÉq", 0, n);
                var h, l, d = a.getImageData(0, 0, r, o).data,
                u = d.length,
                c = 4 * r,
                m = 0,
                p = !1;
                for (h = 0; n > h; h++) {
                    for (l = 0; c > l; l += 4) if (255 !== d[m + l]) {
                        p = !0;
                        break
                    }
                    if (p) break;
                    m += c
                }
                for (i.ascent = n - h, m = u - c, p = !1, h = o; h > n; h--) {
                    for (l = 0; c > l; l += 4) if (255 !== d[m + l]) {
                        p = !0;
                        break
                    }
                    if (p) break;
                    m -= c
                }
                i.descent = h - n,
                i.descent += 6,
                i.fontSize = i.ascent + i.descent,
                e.Text.fontPropertiesCache[t] = i
            }
            return i
        },
        e.Text.prototype.wordWrap = function(t) {
            for (var e = "",
            i = t.split("\n"), s = 0; s < i.length; s++) {
                for (var a = this.style.wordWrapWidth,
                r = i[s].split(" "), n = 0; n < r.length; n++) {
                    var o = this.context.measureText(r[n]).width,
                    h = o + this.context.measureText(" ").width;
                    0 === n || h > a ? (n > 0 && (e += "\n"), e += r[n], a = this.style.wordWrapWidth - o) : (a -= h, e += " " + r[n])
                }
                s < i.length - 1 && (e += "\n")
            }
            return e
        },
        e.Text.prototype.getBounds = function(t) {
            return this.dirty && (this.updateText(), this.dirty = !1),
            e.Sprite.prototype.getBounds.call(this, t)
        },
        e.Text.prototype.destroy = function(t) {
            this.context = null,
            this.canvas = null,
            this.texture.destroy(void 0 === t ? !0 : t)
        },
        e.Text.fontPropertiesCache = {},
        e.Text.fontPropertiesCanvas = document.createElement("canvas"),
        e.Text.fontPropertiesContext = e.Text.fontPropertiesCanvas.getContext("2d"),
        e.BitmapText = function(t, i) {
            e.DisplayObjectContainer.call(this),
            this.textWidth = 0,
            this.textHeight = 0,
            this._pool = [],
            this.setText(t),
            this.setStyle(i),
            this.updateText(),
            this.dirty = !1
        },
        e.BitmapText.prototype = Object.create(e.DisplayObjectContainer.prototype),
        e.BitmapText.prototype.constructor = e.BitmapText,
        e.BitmapText.prototype.setText = function(t) {
            this.text = t || " ",
            this.dirty = !0
        },
        e.BitmapText.prototype.setStyle = function(t) {
            t = t || {},
            t.align = t.align || "left",
            this.style = t;
            var i = t.font.split(" ");
            this.fontName = i[i.length - 1],
            this.fontSize = i.length >= 2 ? parseInt(i[i.length - 2], 10) : e.BitmapText.fonts[this.fontName].size,
            this.dirty = !0,
            this.tint = t.tint
        },
        e.BitmapText.prototype.updateText = function() {
            for (var t = e.BitmapText.fonts[this.fontName], i = new e.Point, s = null, a = [], r = 0, n = [], o = 0, h = this.fontSize / t.size, l = 0; l < this.text.length; l++) {
                var d = this.text.charCodeAt(l);
                if (/(?:\r\n|\r|\n)/.test(this.text.charAt(l))) n.push(i.x),
                r = Math.max(r, i.x),
                o++,
                i.x = 0,
                i.y += t.lineHeight,
                s = null;
                else {
                    var u = t.chars[d];
                    u && (s && u.kerning[s] && (i.x += u.kerning[s]), a.push({
                        texture: u.texture,
                        line: o,
                        charCode: d,
                        position: new e.Point(i.x + u.xOffset, i.y + u.yOffset)
                    }), i.x += u.xAdvance, s = d)
                }
            }
            n.push(i.x),
            r = Math.max(r, i.x);
            var c = [];
            for (l = 0; o >= l; l++) {
                var m = 0;
                "right" === this.style.align ? m = r - n[l] : "center" === this.style.align && (m = (r - n[l]) / 2),
                c.push(m)
            }
            var p = this.children.length,
            g = a.length,
            f = this.tint || 16777215;
            for (l = 0; g > l; l++) {
                var v = p > l ? this.children[l] : this._pool.pop();
                v ? v.setTexture(a[l].texture) : v = new e.Sprite(a[l].texture),
                v.position.x = (a[l].position.x + c[a[l].line]) * h,
                v.position.y = a[l].position.y * h,
                v.scale.x = v.scale.y = h,
                v.tint = f,
                v.parent || this.addChild(v)
            }
            for (; this.children.length > g;) {
                var x = this.getChildAt(this.children.length - 1);
                this._pool.push(x),
                this.removeChild(x)
            }
            this.textWidth = r * h,
            this.textHeight = (i.y + t.lineHeight) * h
        },
        e.BitmapText.prototype.updateTransform = function() {
            this.dirty && (this.updateText(), this.dirty = !1),
            e.DisplayObjectContainer.prototype.updateTransform.call(this)
        },
        e.BitmapText.fonts = {},
        e.InteractionData = function() {
            this.global = new e.Point,
            this.target = null,
            this.originalEvent = null
        },
        e.InteractionData.prototype.getLocalPosition = function(t, i, s) {
            var a = t.worldTransform,
            r = s ? s: this.global,
            n = a.a,
            o = a.c,
            h = a.tx,
            l = a.b,
            d = a.d,
            u = a.ty,
            c = 1 / (n * d + o * -l);
            return i = i || new e.Point,
            i.x = d * c * r.x + -o * c * r.y + (u * o - h * d) * c,
            i.y = n * c * r.y + -l * c * r.x + ( - u * n + h * l) * c,
            i
        },
        e.InteractionData.prototype.constructor = e.InteractionData,
        e.InteractionManager = function(t) {
            this.stage = t,
            this.mouse = new e.InteractionData,
            this.touches = {},
            this.tempPoint = new e.Point,
            this.mouseoverEnabled = !0,
            this.pool = [],
            this.interactiveItems = [],
            this.interactionDOMElement = null,
            this.onMouseMove = this.onMouseMove.bind(this),
            this.onMouseDown = this.onMouseDown.bind(this),
            this.onMouseOut = this.onMouseOut.bind(this),
            this.onMouseUp = this.onMouseUp.bind(this),
            this.onTouchStart = this.onTouchStart.bind(this),
            this.onTouchEnd = this.onTouchEnd.bind(this),
            this.onTouchCancel = this.onTouchCancel.bind(this),
            this.onTouchMove = this.onTouchMove.bind(this),
            this.last = 0,
            this.currentCursorStyle = "inherit",
            this.mouseOut = !1,
            this.resolution = 1,
            this._tempPoint = new e.Point
        },
        e.InteractionManager.prototype.constructor = e.InteractionManager,
        e.InteractionManager.prototype.collectInteractiveSprite = function(t, e) {
            for (var i = t.children,
            s = i.length,
            a = s - 1; a >= 0; a--) {
                var r = i[a];
                r._interactive ? (e.interactiveChildren = !0, this.interactiveItems.push(r), r.children.length > 0 && this.collectInteractiveSprite(r, r)) : (r.__iParent = null, r.children.length > 0 && this.collectInteractiveSprite(r, e))
            }
        },
        e.InteractionManager.prototype.setTarget = function(t) {
            this.target = t,
            this.resolution = t.resolution,
            null === this.interactionDOMElement && this.setTargetDomElement(t.view)
        },
        e.InteractionManager.prototype.setTargetDomElement = function(t) {
            this.removeEvents(),
            window.navigator.msPointerEnabled && (t.style["-ms-content-zooming"] = "none", t.style["-ms-touch-action"] = "none"),
            this.interactionDOMElement = t,
            t.addEventListener("mousemove", this.onMouseMove, !0),
            t.addEventListener("mousedown", this.onMouseDown, !0),
            t.addEventListener("mouseout", this.onMouseOut, !0),
            t.addEventListener("touchstart", this.onTouchStart, !0),
            t.addEventListener("touchend", this.onTouchEnd, !0),
            t.addEventListener("touchleave", this.onTouchCancel, !0),
            t.addEventListener("touchcancel", this.onTouchCancel, !0),
            t.addEventListener("touchmove", this.onTouchMove, !0),
            window.addEventListener("mouseup", this.onMouseUp, !0)
        },
        e.InteractionManager.prototype.removeEvents = function() {
            this.interactionDOMElement && (this.interactionDOMElement.style["-ms-content-zooming"] = "", this.interactionDOMElement.style["-ms-touch-action"] = "", this.interactionDOMElement.removeEventListener("mousemove", this.onMouseMove, !0), this.interactionDOMElement.removeEventListener("mousedown", this.onMouseDown, !0), this.interactionDOMElement.removeEventListener("mouseout", this.onMouseOut, !0), this.interactionDOMElement.removeEventListener("touchstart", this.onTouchStart, !0), this.interactionDOMElement.removeEventListener("touchend", this.onTouchEnd, !0), this.interactionDOMElement.removeEventListener("touchleave", this.onTouchCancel, !0), this.interactionDOMElement.removeEventListener("touchcancel", this.onTouchCancel, !0), this.interactionDOMElement.removeEventListener("touchmove", this.onTouchMove, !0), this.interactionDOMElement = null, window.removeEventListener("mouseup", this.onMouseUp, !0))
        },
        e.InteractionManager.prototype.update = function() {
            if (this.target) {
                var t = Date.now(),
                i = t - this.last;
                if (i = i * e.INTERACTION_FREQUENCY / 1e3, !(1 > i)) {
                    this.last = t;
                    var s = 0;
                    this.dirty && this.rebuildInteractiveGraph();
                    var a = this.interactiveItems.length,
                    r = "inherit",
                    n = !1;
                    for (s = 0; a > s; s++) {
                        var o = this.interactiveItems[s];
                        o.__hit = this.hitTest(o, this.mouse),
                        this.mouse.target = o,
                        o.__hit && !n ? (o.buttonMode && (r = o.defaultCursor), o.interactiveChildren || (n = !0), o.__isOver || (o.mouseover && o.mouseover(this.mouse), o.__isOver = !0)) : o.__isOver && (o.mouseout && o.mouseout(this.mouse), o.__isOver = !1)
                    }
                    this.currentCursorStyle !== r && (this.currentCursorStyle = r, this.interactionDOMElement.style.cursor = r)
                }
            }
        },
        e.InteractionManager.prototype.rebuildInteractiveGraph = function() {
            this.dirty = !1;
            for (var t = this.interactiveItems.length,
            e = 0; t > e; e++) this.interactiveItems[e].interactiveChildren = !1;
            this.interactiveItems = [],
            this.stage.interactive && this.interactiveItems.push(this.stage),
            this.collectInteractiveSprite(this.stage, this.stage)
        },
        e.InteractionManager.prototype.onMouseMove = function(t) {
            this.dirty && this.rebuildInteractiveGraph(),
            this.mouse.originalEvent = t;
            var e = this.interactionDOMElement.getBoundingClientRect();
            this.mouse.global.x = (t.clientX - e.left) * (this.target.width / e.width) / this.resolution,
            this.mouse.global.y = (t.clientY - e.top) * (this.target.height / e.height) / this.resolution;
            for (var i = this.interactiveItems.length,
            s = 0; i > s; s++) {
                var a = this.interactiveItems[s];
                a.mousemove && a.mousemove(this.mouse)
            }
        },
        e.InteractionManager.prototype.onMouseDown = function(t) {
            this.dirty && this.rebuildInteractiveGraph(),
            this.mouse.originalEvent = t,
            e.AUTO_PREVENT_DEFAULT && this.mouse.originalEvent.preventDefault();
            for (var i = this.interactiveItems.length,
            s = this.mouse.originalEvent,
            a = 2 === s.button || 3 === s.which,
            r = a ? "rightdown": "mousedown", n = a ? "rightclick": "click", o = a ? "__rightIsDown": "__mouseIsDown", h = a ? "__isRightDown": "__isDown", l = 0; i > l; l++) {
                var d = this.interactiveItems[l];
                if ((d[r] || d[n]) && (d[o] = !0, d.__hit = this.hitTest(d, this.mouse), d.__hit && (d[r] && d[r](this.mouse), d[h] = !0, !d.interactiveChildren))) break
            }
        },
        e.InteractionManager.prototype.onMouseOut = function(t) {
            this.dirty && this.rebuildInteractiveGraph(),
            this.mouse.originalEvent = t;
            var e = this.interactiveItems.length;
            this.interactionDOMElement.style.cursor = "inherit";
            for (var i = 0; e > i; i++) {
                var s = this.interactiveItems[i];
                s.__isOver && (this.mouse.target = s, s.mouseout && s.mouseout(this.mouse), s.__isOver = !1)
            }
            this.mouseOut = !0,
            this.mouse.global.x = -1e4,
            this.mouse.global.y = -1e4
        },
        e.InteractionManager.prototype.onMouseUp = function(t) {
            this.dirty && this.rebuildInteractiveGraph(),
            this.mouse.originalEvent = t;
            for (var e = this.interactiveItems.length,
            i = !1,
            s = this.mouse.originalEvent,
            a = 2 === s.button || 3 === s.which,
            r = a ? "rightup": "mouseup", n = a ? "rightclick": "click", o = a ? "rightupoutside": "mouseupoutside", h = a ? "__isRightDown": "__isDown", l = 0; e > l; l++) {
                var d = this.interactiveItems[l]; (d[n] || d[r] || d[o]) && (d.__hit = this.hitTest(d, this.mouse), d.__hit && !i ? (d[r] && d[r](this.mouse), d[h] && d[n] && d[n](this.mouse), d.interactiveChildren || (i = !0)) : d[h] && d[o] && d[o](this.mouse), d[h] = !1)
            }
        },
        e.InteractionManager.prototype.hitTest = function(t, i) {
            var s = i.global;
            if (!t.worldVisible) return ! 1;
            t.worldTransform.applyInverse(s, this._tempPoint);
            var a, r = this._tempPoint.x,
            n = this._tempPoint.y;
            if (i.target = t, t.hitArea && t.hitArea.contains) return t.hitArea.contains(r, n);
            if (t instanceof e.Sprite) {
                var o, h = t.texture.frame.width,
                l = t.texture.frame.height,
                d = -h * t.anchor.x;
                if (r > d && d + h > r && (o = -l * t.anchor.y, n > o && o + l > n)) return ! 0
            } else if (t instanceof e.Graphics) {
                var u = t.graphicsData;
                for (a = 0; a < u.length; a++) {
                    var c = u[a];
                    if (c.fill && c.shape && c.shape.contains(r, n)) return ! 0
                }
            }
            var m = t.children.length;
            for (a = 0; m > a; a++) {
                var p = t.children[a],
                g = this.hitTest(p, i);
                if (g) return i.target = t,
                !0
            }
            return ! 1
        },
        e.InteractionManager.prototype.onTouchMove = function(t) {
            this.dirty && this.rebuildInteractiveGraph();
            for (var e, i, s = this.interactionDOMElement.getBoundingClientRect(), a = t.changedTouches, r = a.length, n = this.target.width / s.width, o = this.target.height / s.height, h = navigator.isCocoonJS && !s.left && !s.top && !t.target.style.width && !t.target.style.height, l = 0; r > l; l++) i = a[l],
            h ? (i.globalX = i.clientX, i.globalY = i.clientY) : (i.globalX = (i.clientX - s.left) * n / this.resolution, i.globalY = (i.clientY - s.top) * o / this.resolution);
            for (var d = 0; r > d; d++) {
                i = a[d],
                e = this.touches[i.identifier],
                e.originalEvent = t,
                h ? (e.global.x = i.clientX, e.global.y = i.clientY) : (i.globalX = e.global.x = (i.clientX - s.left) * n / this.resolution, i.globalY = e.global.y = (i.clientY - s.top) * o / this.resolution);
                for (var u = 0; u < this.interactiveItems.length; u++) {
                    var c = this.interactiveItems[u];
                    c.touchmove && c.__touchData && c.__touchData[i.identifier] && c.touchmove(e)
                }
            }
        },
        e.InteractionManager.prototype.onTouchStart = function(t) {
            this.dirty && this.rebuildInteractiveGraph();
            var i = this.interactionDOMElement.getBoundingClientRect();
            e.AUTO_PREVENT_DEFAULT && t.preventDefault();
            for (var s, a = t.changedTouches,
            r = a.length,
            n = this.target.width / i.width,
            o = this.target.height / i.height,
            h = navigator.isCocoonJS && !i.left && !i.top && !t.target.style.width && !t.target.style.height,
            l = 0; r > l; l++) s = a[l],
            h ? (s.globalX = s.clientX, s.globalY = s.clientY) : (s.globalX = (s.clientX - i.left) * n / this.resolution, s.globalY = (s.clientY - i.top) * o / this.resolution);
            for (var d = 0; r > d; d++) {
                s = a[d];
                var u = this.pool.pop();
                u || (u = new e.InteractionData),
                u.originalEvent = t,
                this.touches[s.identifier] = u,
                h ? (u.global.x = s.clientX, u.global.y = s.clientY) : (u.global.x = (s.clientX - i.left) * n / this.resolution, u.global.y = (s.clientY - i.top) * o / this.resolution);
                for (var c = this.interactiveItems.length,
                m = 0; c > m; m++) {
                    var p = this.interactiveItems[m];
                    if ((p.touchstart || p.tap) && (p.__hit = this.hitTest(p, u), p.__hit && (p.touchstart && p.touchstart(u), p.__isDown = !0, p.__touchData = p.__touchData || {},
                    p.__touchData[s.identifier] = u, !p.interactiveChildren))) break
                }
            }
        },
        e.InteractionManager.prototype.onTouchEnd = function(t) {
            this.dirty && this.rebuildInteractiveGraph();
            for (var e, i = this.interactionDOMElement.getBoundingClientRect(), s = t.changedTouches, a = s.length, r = this.target.width / i.width, n = this.target.height / i.height, o = navigator.isCocoonJS && !i.left && !i.top && !t.target.style.width && !t.target.style.height, h = 0; a > h; h++) e = s[h],
            o ? (e.globalX = e.clientX, e.globalY = e.clientY) : (e.globalX = (e.clientX - i.left) * r / this.resolution, e.globalY = (e.clientY - i.top) * n / this.resolution);
            for (var l = 0; a > l; l++) {
                e = s[l];
                var d = this.touches[e.identifier],
                u = !1;
                o ? (d.global.x = e.clientX, d.global.y = e.clientY) : (d.global.x = (e.clientX - i.left) * r / this.resolution, d.global.y = (e.clientY - i.top) * n / this.resolution);
                for (var c = this.interactiveItems.length,
                m = 0; c > m; m++) {
                    var p = this.interactiveItems[m];
                    p.__touchData && p.__touchData[e.identifier] && (p.__hit = this.hitTest(p, p.__touchData[e.identifier]), d.originalEvent = t, (p.touchend || p.tap) && (p.__hit && !u ? (p.touchend && p.touchend(d), p.__isDown && p.tap && p.tap(d), p.interactiveChildren || (u = !0)) : p.__isDown && p.touchendoutside && p.touchendoutside(d), p.__isDown = !1), p.__touchData[e.identifier] = null)
                }
                this.pool.push(d),
                this.touches[e.identifier] = null
            }
        },
        e.InteractionManager.prototype.onTouchCancel = function(t) {
            this.dirty && this.rebuildInteractiveGraph();
            for (var e, i = this.interactionDOMElement.getBoundingClientRect(), s = t.changedTouches, a = s.length, r = this.target.width / i.width, n = this.target.height / i.height, o = navigator.isCocoonJS && !i.left && !i.top && !t.target.style.width && !t.target.style.height, h = 0; a > h; h++) e = s[h],
            o ? (e.globalX = e.clientX, e.globalY = e.clientY) : (e.globalX = (e.clientX - i.left) * r / this.resolution, e.globalY = (e.clientY - i.top) * n / this.resolution);
            for (var l = 0; a > l; l++) {
                e = s[l];
                var d = this.touches[e.identifier],
                u = !1;
                o ? (d.global.x = e.clientX, d.global.y = e.clientY) : (d.global.x = (e.clientX - i.left) * r / this.resolution, d.global.y = (e.clientY - i.top) * n / this.resolution);
                for (var c = this.interactiveItems.length,
                m = 0; c > m; m++) {
                    var p = this.interactiveItems[m];
                    p.__touchData && p.__touchData[e.identifier] && (p.__hit = this.hitTest(p, p.__touchData[e.identifier]), d.originalEvent = t, p.touchcancel && !u && (p.touchcancel(d), p.interactiveChildren || (u = !0)), p.__isDown = !1, p.__touchData[e.identifier] = null)
                }
                this.pool.push(d),
                this.touches[e.identifier] = null
            }
        },
        e.Stage = function(t) {
            e.DisplayObjectContainer.call(this),
            this.worldTransform = new e.Matrix,
            this.interactive = !0,
            this.interactionManager = new e.InteractionManager(this),
            this.dirty = !0,
            this.stage = this,
            this.stage.hitArea = new e.Rectangle(0, 0, 1e5, 1e5),
            this.setBackgroundColor(t)
        },
        e.Stage.prototype = Object.create(e.DisplayObjectContainer.prototype),
        e.Stage.prototype.constructor = e.Stage,
        e.Stage.prototype.setInteractionDelegate = function(t) {
            this.interactionManager.setTargetDomElement(t)
        },
        e.Stage.prototype.updateTransform = function() {
            this.worldAlpha = 1;
            for (var t = 0,
            e = this.children.length; e > t; t++) this.children[t].updateTransform();
            this.dirty && (this.dirty = !1, this.interactionManager.dirty = !0),
            this.interactive && this.interactionManager.update()
        },
        e.Stage.prototype.setBackgroundColor = function(t) {
            this.backgroundColor = t || 0,
            this.backgroundColorSplit = e.hex2rgb(this.backgroundColor);
            var i = this.backgroundColor.toString(16);
            i = "000000".substr(0, 6 - i.length) + i,
            this.backgroundColorString = "#" + i
        },
        e.Stage.prototype.getMousePosition = function() {
            return this.interactionManager.mouse.global
        },
        function(t) {
            for (var e = 0,
            i = ["ms", "moz", "webkit", "o"], s = 0; s < i.length && !t.requestAnimationFrame; ++s) t.requestAnimationFrame = t[i[s] + "RequestAnimationFrame"],
            t.cancelAnimationFrame = t[i[s] + "CancelAnimationFrame"] || t[i[s] + "CancelRequestAnimationFrame"];
            t.requestAnimationFrame || (t.requestAnimationFrame = function(i) {
                var s = (new Date).getTime(),
                a = Math.max(0, 16 - (s - e)),
                r = t.setTimeout(function() {
                    i(s + a)
                },
                a);
                return e = s + a,
                r
            }),
            t.cancelAnimationFrame || (t.cancelAnimationFrame = function(t) {
                clearTimeout(t)
            }),
            t.requestAnimFrame = t.requestAnimationFrame
        } (this),
        e.hex2rgb = function(t) {
            return [(t >> 16 & 255) / 255, (t >> 8 & 255) / 255, (255 & t) / 255]
        },
        e.rgb2hex = function(t) {
            return (255 * t[0] << 16) + (255 * t[1] << 8) + 255 * t[2]
        },
        "function" != typeof Function.prototype.bind && (Function.prototype.bind = function() {
            return function(t) {
                function e() {
                    for (var s = arguments.length,
                    r = new Array(s); s--;) r[s] = arguments[s];
                    return r = a.concat(r),
                    i.apply(this instanceof e ? this: t, r)
                }
                var i = this,
                s = arguments.length - 1,
                a = [];
                if (s > 0) for (a.length = s; s--;) a[s] = arguments[s + 1];
                if ("function" != typeof i) throw new TypeError;
                return e.prototype = function r(t) {
                    return t && (r.prototype = t),
                    this instanceof r ? void 0 : new r
                } (i.prototype),
                e
            }
        } ()),
        e.AjaxRequest = function() {
            var t = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Microsoft.XMLHTTP"];
            if (!window.ActiveXObject) return window.XMLHttpRequest ? new window.XMLHttpRequest: !1;
            for (var e = 0; e < t.length; e++) try {
                return new window.ActiveXObject(t[e])
            } catch(i) {}
        },
        e.canUseNewCanvasBlendModes = function() {
            if ("undefined" == typeof document) return ! 1;
            var t = document.createElement("canvas");
            t.width = 1,
            t.height = 1;
            var e = t.getContext("2d");
            return e.fillStyle = "#000",
            e.fillRect(0, 0, 1, 1),
            e.globalCompositeOperation = "multiply",
            e.fillStyle = "#fff",
            e.fillRect(0, 0, 1, 1),
            0 === e.getImageData(0, 0, 1, 1).data[0]
        },
        e.getNextPowerOfTwo = function(t) {
            if (t > 0 && 0 === (t & t - 1)) return t;
            for (var e = 1; t > e;) e <<= 1;
            return e
        },
        e.isPowerOfTwo = function(t, e) {
            return t > 0 && 0 === (t & t - 1) && e > 0 && 0 === (e & e - 1)
        },
        e.EventTarget = {
            call: function(t) {
                t && (t = t.prototype || t, e.EventTarget.mixin(t))
            },
            mixin: function(t) {
                t.listeners = function(t) {
                    return this._listeners = this._listeners || {},
                    this._listeners[t] ? this._listeners[t].slice() : []
                },
                t.emit = t.dispatchEvent = function(t, i) {
                    if (this._listeners = this._listeners || {},
                    "object" == typeof t && (i = t, t = t.type), i && i.__isEventObject === !0 || (i = new e.Event(this, t, i)), this._listeners && this._listeners[t]) {
                        var s, a = this._listeners[t].slice(0),
                        r = a.length,
                        n = a[0];
                        for (s = 0; r > s; n = a[++s]) if (n.call(this, i), i.stoppedImmediate) return this;
                        if (i.stopped) return this
                    }
                    return this.parent && this.parent.emit && this.parent.emit.call(this.parent, t, i),
                    this
                },
                t.on = t.addEventListener = function(t, e) {
                    return this._listeners = this._listeners || {},
                    (this._listeners[t] = this._listeners[t] || []).push(e),
                    this
                },
                t.once = function(t, e) {
                    function i() {
                        e.apply(s.off(t, i), arguments)
                    }
                    this._listeners = this._listeners || {};
                    var s = this;
                    return i._originalHandler = e,
                    this.on(t, i)
                },
                t.off = t.removeEventListener = function(t, e) {
                    if (this._listeners = this._listeners || {},
                    !this._listeners[t]) return this;
                    for (var i = this._listeners[t], s = e ? i.length: 0; s-->0;)(i[s] === e || i[s]._originalHandler === e) && i.splice(s, 1);
                    return 0 === i.length && delete this._listeners[t],
                    this
                },
                t.removeAllListeners = function(t) {
                    return this._listeners = this._listeners || {},
                    this._listeners[t] ? (delete this._listeners[t], this) : this
                }
            }
        },
        e.Event = function(t, e, i) {
            this.__isEventObject = !0,
            this.stopped = !1,
            this.stoppedImmediate = !1,
            this.target = t,
            this.type = e,
            this.data = i,
            this.content = i,
            this.timeStamp = Date.now()
        },
        e.Event.prototype.stopPropagation = function() {
            this.stopped = !0
        },
        e.Event.prototype.stopImmediatePropagation = function() {
            this.stoppedImmediate = !0
        },
        e.autoDetectRenderer = function(t, i, s) {
            t || (t = 800),
            i || (i = 600);
            var a = function() {
                try {
                    var t = document.createElement("canvas");
                    return !! window.WebGLRenderingContext && (t.getContext("webgl") || t.getContext("experimental-webgl"))
                } catch(e) {
                    return ! 1
                }
            } ();
            return a ? new e.WebGLRenderer(t, i, s) : new e.CanvasRenderer(t, i, s)
        },
        e.autoDetectRecommendedRenderer = function(t, i, s) {
            t || (t = 800),
            i || (i = 600);
            var a = function() {
                try {
                    var t = document.createElement("canvas");
                    return !! window.WebGLRenderingContext && (t.getContext("webgl") || t.getContext("experimental-webgl"))
                } catch(e) {
                    return ! 1
                }
            } (),
            r = /Android/i.test(navigator.userAgent);
            return a && !r ? new e.WebGLRenderer(t, i, s) : new e.CanvasRenderer(t, i, s)
        },
        e.PolyK = {},
        e.PolyK.Triangulate = function(t) {
            var i = !0,
            s = t.length >> 1;
            if (3 > s) return [];
            for (var a = [], r = [], n = 0; s > n; n++) r.push(n);
            n = 0;
            for (var o = s; o > 3;) {
                var h = r[(n + 0) % o],
                l = r[(n + 1) % o],
                d = r[(n + 2) % o],
                u = t[2 * h],
                c = t[2 * h + 1],
                m = t[2 * l],
                p = t[2 * l + 1],
                g = t[2 * d],
                f = t[2 * d + 1],
                v = !1;
                if (e.PolyK._convex(u, c, m, p, g, f, i)) {
                    v = !0;
                    for (var x = 0; o > x; x++) {
                        var y = r[x];
                        if (y !== h && y !== l && y !== d && e.PolyK._PointInTriangle(t[2 * y], t[2 * y + 1], u, c, m, p, g, f)) {
                            v = !1;
                            break
                        }
                    }
                }
                if (v) a.push(h, l, d),
                r.splice((n + 1) % o, 1),
                o--,
                n = 0;
                else if (n++>3 * o) {
                    if (!i) return null;
                    for (a = [], r = [], n = 0; s > n; n++) r.push(n);
                    n = 0,
                    o = s,
                    i = !1
                }
            }
            return a.push(r[0], r[1], r[2]),
            a
        },
        e.PolyK._PointInTriangle = function(t, e, i, s, a, r, n, o) {
            var h = n - i,
            l = o - s,
            d = a - i,
            u = r - s,
            c = t - i,
            m = e - s,
            p = h * h + l * l,
            g = h * d + l * u,
            f = h * c + l * m,
            v = d * d + u * u,
            x = d * c + u * m,
            y = 1 / (p * v - g * g),
            b = (v * f - g * x) * y,
            w = (p * x - g * f) * y;
            return b >= 0 && w >= 0 && 1 > b + w
        },
        e.PolyK._convex = function(t, e, i, s, a, r, n) {
            return (e - s) * (a - i) + (i - t) * (r - s) >= 0 === n
        },
        e.initDefaultShaders = function() {},
        e.CompileVertexShader = function(t, i) {
            return e._CompileShader(t, i, t.VERTEX_SHADER)
        },
        e.CompileFragmentShader = function(t, i) {
            return e._CompileShader(t, i, t.FRAGMENT_SHADER)
        },
        e._CompileShader = function(t, e, i) {
            var s = e.join("\n"),
            a = t.createShader(i);
            return t.shaderSource(a, s),
            t.compileShader(a),
            t.getShaderParameter(a, t.COMPILE_STATUS) ? a: (window.console.log(t.getShaderInfoLog(a)), null)
        },
        e.compileProgram = function(t, i, s) {
            var a = e.CompileFragmentShader(t, s),
            r = e.CompileVertexShader(t, i),
            n = t.createProgram();
            return t.attachShader(n, r),
            t.attachShader(n, a),
            t.linkProgram(n),
            t.getProgramParameter(n, t.LINK_STATUS) || window.console.log("Could not initialise shaders"),
            n
        },
        e.PixiShader = function(t) {
            this._UID = e._UID++,
            this.gl = t,
            this.program = null,
            this.fragmentSrc = ["precision lowp float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"],
            this.textureCount = 0,
            this.firstRun = !0,
            this.dirty = !0,
            this.attributes = [],
            this.init()
        },
        e.PixiShader.prototype.constructor = e.PixiShader,
        e.PixiShader.prototype.init = function() {
            var t = this.gl,
            i = e.compileProgram(t, this.vertexSrc || e.PixiShader.defaultVertexSrc, this.fragmentSrc);
            t.useProgram(i),
            this.uSampler = t.getUniformLocation(i, "uSampler"),
            this.projectionVector = t.getUniformLocation(i, "projectionVector"),
            this.offsetVector = t.getUniformLocation(i, "offsetVector"),
            this.dimensions = t.getUniformLocation(i, "dimensions"),
            this.aVertexPosition = t.getAttribLocation(i, "aVertexPosition"),
            this.aTextureCoord = t.getAttribLocation(i, "aTextureCoord"),
            this.colorAttribute = t.getAttribLocation(i, "aColor"),
            -1 === this.colorAttribute && (this.colorAttribute = 2),
            this.attributes = [this.aVertexPosition, this.aTextureCoord, this.colorAttribute];
            for (var s in this.uniforms) this.uniforms[s].uniformLocation = t.getUniformLocation(i, s);
            this.initUniforms(),
            this.program = i
        },
        e.PixiShader.prototype.initUniforms = function() {
            this.textureCount = 1;
            var t, e = this.gl;
            for (var i in this.uniforms) {
                t = this.uniforms[i];
                var s = t.type;
                "sampler2D" === s ? (t._init = !1, null !== t.value && this.initSampler2D(t)) : "mat2" === s || "mat3" === s || "mat4" === s ? (t.glMatrix = !0, t.glValueLength = 1, "mat2" === s ? t.glFunc = e.uniformMatrix2fv: "mat3" === s ? t.glFunc = e.uniformMatrix3fv: "mat4" === s && (t.glFunc = e.uniformMatrix4fv)) : (t.glFunc = e["uniform" + s], "2f" === s || "2i" === s ? t.glValueLength = 2 : "3f" === s || "3i" === s ? t.glValueLength = 3 : "4f" === s || "4i" === s ? t.glValueLength = 4 : t.glValueLength = 1)
            }
        },
        e.PixiShader.prototype.initSampler2D = function(t) {
            if (t.value && t.value.baseTexture && t.value.baseTexture.hasLoaded) {
                var e = this.gl;
                if (e.activeTexture(e["TEXTURE" + this.textureCount]), e.bindTexture(e.TEXTURE_2D, t.value.baseTexture._glTextures[e.id]), t.textureData) {
                    var i = t.textureData,
                    s = i.magFilter ? i.magFilter: e.LINEAR,
                    a = i.minFilter ? i.minFilter: e.LINEAR,
                    r = i.wrapS ? i.wrapS: e.CLAMP_TO_EDGE,
                    n = i.wrapT ? i.wrapT: e.CLAMP_TO_EDGE,
                    o = i.luminance ? e.LUMINANCE: e.RGBA;
                    if (i.repeat && (r = e.REPEAT, n = e.REPEAT), e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, !!i.flipY), i.width) {
                        var h = i.width ? i.width: 512,
                        l = i.height ? i.height: 2,
                        d = i.border ? i.border: 0;
                        e.texImage2D(e.TEXTURE_2D, 0, o, h, l, d, o, e.UNSIGNED_BYTE, null)
                    } else e.texImage2D(e.TEXTURE_2D, 0, o, e.RGBA, e.UNSIGNED_BYTE, t.value.baseTexture.source);
                    e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MAG_FILTER, s),
                    e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MIN_FILTER, a),
                    e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_S, r),
                    e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_T, n)
                }
                e.uniform1i(t.uniformLocation, this.textureCount),
                t._init = !0,
                this.textureCount++
            }
        },
        e.PixiShader.prototype.syncUniforms = function() {
            this.textureCount = 1;
            var t, i = this.gl;
            for (var s in this.uniforms) t = this.uniforms[s],
            1 === t.glValueLength ? t.glMatrix === !0 ? t.glFunc.call(i, t.uniformLocation, t.transpose, t.value) : t.glFunc.call(i, t.uniformLocation, t.value) : 2 === t.glValueLength ? t.glFunc.call(i, t.uniformLocation, t.value.x, t.value.y) : 3 === t.glValueLength ? t.glFunc.call(i, t.uniformLocation, t.value.x, t.value.y, t.value.z) : 4 === t.glValueLength ? t.glFunc.call(i, t.uniformLocation, t.value.x, t.value.y, t.value.z, t.value.w) : "sampler2D" === t.type && (t._init ? (i.activeTexture(i["TEXTURE" + this.textureCount]), t.value.baseTexture._dirty[i.id] ? e.instances[i.id].updateTexture(t.value.baseTexture) : i.bindTexture(i.TEXTURE_2D, t.value.baseTexture._glTextures[i.id]), i.uniform1i(t.uniformLocation, this.textureCount), this.textureCount++) : this.initSampler2D(t))
        },
        e.PixiShader.prototype.destroy = function() {
            this.gl.deleteProgram(this.program),
            this.uniforms = null,
            this.gl = null,
            this.attributes = null
        },
        e.PixiShader.defaultVertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "attribute vec4 aColor;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "const vec2 center = vec2(-1.0, 1.0);", "void main(void) {", "   gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);", "   vTextureCoord = aTextureCoord;", "   vColor = vec4(aColor.rgb * aColor.a, aColor.a);", "}"],
        e.PixiFastShader = function(t) {
            this._UID = e._UID++,
            this.gl = t,
            this.program = null,
            this.fragmentSrc = ["precision lowp float;", "varying vec2 vTextureCoord;", "varying float vColor;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"],
            this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aPositionCoord;", "attribute vec2 aScale;", "attribute float aRotation;", "attribute vec2 aTextureCoord;", "attribute float aColor;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform mat3 uMatrix;", "varying vec2 vTextureCoord;", "varying float vColor;", "const vec2 center = vec2(-1.0, 1.0);", "void main(void) {", "   vec2 v;", "   vec2 sv = aVertexPosition * aScale;", "   v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);", "   v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);", "   v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;", "   gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);", "   vTextureCoord = aTextureCoord;", "   vColor = aColor;", "}"],
            this.textureCount = 0,
            this.init()
        },
        e.PixiFastShader.prototype.constructor = e.PixiFastShader,
        e.PixiFastShader.prototype.init = function() {
            var t = this.gl,
            i = e.compileProgram(t, this.vertexSrc, this.fragmentSrc);
            t.useProgram(i),
            this.uSampler = t.getUniformLocation(i, "uSampler"),
            this.projectionVector = t.getUniformLocation(i, "projectionVector"),
            this.offsetVector = t.getUniformLocation(i, "offsetVector"),
            this.dimensions = t.getUniformLocation(i, "dimensions"),
            this.uMatrix = t.getUniformLocation(i, "uMatrix"),
            this.aVertexPosition = t.getAttribLocation(i, "aVertexPosition"),
            this.aPositionCoord = t.getAttribLocation(i, "aPositionCoord"),
            this.aScale = t.getAttribLocation(i, "aScale"),
            this.aRotation = t.getAttribLocation(i, "aRotation"),
            this.aTextureCoord = t.getAttribLocation(i, "aTextureCoord"),
            this.colorAttribute = t.getAttribLocation(i, "aColor"),
            -1 === this.colorAttribute && (this.colorAttribute = 2),
            this.attributes = [this.aVertexPosition, this.aPositionCoord, this.aScale, this.aRotation, this.aTextureCoord, this.colorAttribute],
            this.program = i
        },
        e.PixiFastShader.prototype.destroy = function() {
            this.gl.deleteProgram(this.program),
            this.uniforms = null,
            this.gl = null,
            this.attributes = null
        },
        e.StripShader = function(t) {
            this._UID = e._UID++,
            this.gl = t,
            this.program = null,
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "uniform float alpha;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * alpha;", "}"],
            this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "void main(void) {", "   vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", "   v -= offsetVector.xyx;", "   gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);", "   vTextureCoord = aTextureCoord;", "}"],
            this.init()
        },
        e.StripShader.prototype.constructor = e.StripShader,
        e.StripShader.prototype.init = function() {
            var t = this.gl,
            i = e.compileProgram(t, this.vertexSrc, this.fragmentSrc);
            t.useProgram(i),
            this.uSampler = t.getUniformLocation(i, "uSampler"),
            this.projectionVector = t.getUniformLocation(i, "projectionVector"),
            this.offsetVector = t.getUniformLocation(i, "offsetVector"),
            this.colorAttribute = t.getAttribLocation(i, "aColor"),
            this.aVertexPosition = t.getAttribLocation(i, "aVertexPosition"),
            this.aTextureCoord = t.getAttribLocation(i, "aTextureCoord"),
            this.attributes = [this.aVertexPosition, this.aTextureCoord],
            this.translationMatrix = t.getUniformLocation(i, "translationMatrix"),
            this.alpha = t.getUniformLocation(i, "alpha"),
            this.program = i
        },
        e.StripShader.prototype.destroy = function() {
            this.gl.deleteProgram(this.program),
            this.uniforms = null,
            this.gl = null,
            this.attribute = null
        },
        e.PrimitiveShader = function(t) {
            this._UID = e._UID++,
            this.gl = t,
            this.program = null,
            this.fragmentSrc = ["precision mediump float;", "varying vec4 vColor;", "void main(void) {", "   gl_FragColor = vColor;", "}"],
            this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec4 aColor;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform float alpha;", "uniform float flipY;", "uniform vec3 tint;", "varying vec4 vColor;", "void main(void) {", "   vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", "   v -= offsetVector.xyx;", "   gl_Position = vec4( v.x / projectionVector.x -1.0, (v.y / projectionVector.y * -flipY) + flipY , 0.0, 1.0);", "   vColor = aColor * vec4(tint * alpha, alpha);", "}"],
            this.init()
        },
        e.PrimitiveShader.prototype.constructor = e.PrimitiveShader,
        e.PrimitiveShader.prototype.init = function() {
            var t = this.gl,
            i = e.compileProgram(t, this.vertexSrc, this.fragmentSrc);
            t.useProgram(i),
            this.projectionVector = t.getUniformLocation(i, "projectionVector"),
            this.offsetVector = t.getUniformLocation(i, "offsetVector"),
            this.tintColor = t.getUniformLocation(i, "tint"),
            this.flipY = t.getUniformLocation(i, "flipY"),
            this.aVertexPosition = t.getAttribLocation(i, "aVertexPosition"),
            this.colorAttribute = t.getAttribLocation(i, "aColor"),
            this.attributes = [this.aVertexPosition, this.colorAttribute],
            this.translationMatrix = t.getUniformLocation(i, "translationMatrix"),
            this.alpha = t.getUniformLocation(i, "alpha"),
            this.program = i
        },
        e.PrimitiveShader.prototype.destroy = function() {
            this.gl.deleteProgram(this.program),
            this.uniforms = null,
            this.gl = null,
            this.attributes = null
        },
        e.ComplexPrimitiveShader = function(t) {
            this._UID = e._UID++,
            this.gl = t,
            this.program = null,
            this.fragmentSrc = ["precision mediump float;", "varying vec4 vColor;", "void main(void) {", "   gl_FragColor = vColor;", "}"],
            this.vertexSrc = ["attribute vec2 aVertexPosition;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform vec3 tint;", "uniform float alpha;", "uniform vec3 color;", "uniform float flipY;", "varying vec4 vColor;", "void main(void) {", "   vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", "   v -= offsetVector.xyx;", "   gl_Position = vec4( v.x / projectionVector.x -1.0, (v.y / projectionVector.y * -flipY) + flipY , 0.0, 1.0);", "   vColor = vec4(color * alpha * tint, alpha);", "}"],
            this.init()
        },
        e.ComplexPrimitiveShader.prototype.constructor = e.ComplexPrimitiveShader,
        e.ComplexPrimitiveShader.prototype.init = function() {
            var t = this.gl,
            i = e.compileProgram(t, this.vertexSrc, this.fragmentSrc);
            t.useProgram(i),
            this.projectionVector = t.getUniformLocation(i, "projectionVector"),
            this.offsetVector = t.getUniformLocation(i, "offsetVector"),
            this.tintColor = t.getUniformLocation(i, "tint"),
            this.color = t.getUniformLocation(i, "color"),
            this.flipY = t.getUniformLocation(i, "flipY"),
            this.aVertexPosition = t.getAttribLocation(i, "aVertexPosition"),
            this.attributes = [this.aVertexPosition, this.colorAttribute],
            this.translationMatrix = t.getUniformLocation(i, "translationMatrix"),
            this.alpha = t.getUniformLocation(i, "alpha"),
            this.program = i
        },
        e.ComplexPrimitiveShader.prototype.destroy = function() {
            this.gl.deleteProgram(this.program),
            this.uniforms = null,
            this.gl = null,
            this.attribute = null
        },
        e.WebGLGraphics = function() {},
        e.WebGLGraphics.renderGraphics = function(t, i) {
            var s, a = i.gl,
            r = i.projection,
            n = i.offset,
            o = i.shaderManager.primitiveShader;
            t.dirty && e.WebGLGraphics.updateGraphics(t, a);
            for (var h = t._webGL[a.id], l = 0; l < h.data.length; l++) 1 === h.data[l].mode ? (s = h.data[l], i.stencilManager.pushStencil(t, s, i), a.drawElements(a.TRIANGLE_FAN, 4, a.UNSIGNED_SHORT, 2 * (s.indices.length - 4)), i.stencilManager.popStencil(t, s, i)) : (s = h.data[l], i.shaderManager.setShader(o), o = i.shaderManager.primitiveShader, a.uniformMatrix3fv(o.translationMatrix, !1, t.worldTransform.toArray(!0)), a.uniform1f(o.flipY, 1), a.uniform2f(o.projectionVector, r.x, -r.y), a.uniform2f(o.offsetVector, -n.x, -n.y), a.uniform3fv(o.tintColor, e.hex2rgb(t.tint)), a.uniform1f(o.alpha, t.worldAlpha), a.bindBuffer(a.ARRAY_BUFFER, s.buffer), a.vertexAttribPointer(o.aVertexPosition, 2, a.FLOAT, !1, 24, 0), a.vertexAttribPointer(o.colorAttribute, 4, a.FLOAT, !1, 24, 8), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, s.indexBuffer), a.drawElements(a.TRIANGLE_STRIP, s.indices.length, a.UNSIGNED_SHORT, 0))
        },
        e.WebGLGraphics.updateGraphics = function(t, i) {
            var s = t._webGL[i.id];
            s || (s = t._webGL[i.id] = {
                lastIndex: 0,
                data: [],
                gl: i
            }),
            t.dirty = !1;
            var a;
            if (t.clearDirty) {
                for (t.clearDirty = !1, a = 0; a < s.data.length; a++) {
                    var r = s.data[a];
                    r.reset(),
                    e.WebGLGraphics.graphicsDataPool.push(r)
                }
                s.data = [],
                s.lastIndex = 0
            }
            var n;
            for (a = s.lastIndex; a < t.graphicsData.length; a++) {
                var o = t.graphicsData[a];
                if (o.type === e.Graphics.POLY) {
                    if (o.points = o.shape.points.slice(), o.shape.closed && (o.points[0] !== o.points[o.points.length - 2] || o.points[1] !== o.points[o.points.length - 1]) && o.points.push(o.points[0], o.points[1]), o.fill && o.points.length >= 6) if (o.points.length < 12) {
                        n = e.WebGLGraphics.switchMode(s, 0);
                        var h = e.WebGLGraphics.buildPoly(o, n);
                        h || (n = e.WebGLGraphics.switchMode(s, 1), e.WebGLGraphics.buildComplexPoly(o, n))
                    } else n = e.WebGLGraphics.switchMode(s, 1),
                    e.WebGLGraphics.buildComplexPoly(o, n);
                    o.lineWidth > 0 && (n = e.WebGLGraphics.switchMode(s, 0), e.WebGLGraphics.buildLine(o, n))
                } else n = e.WebGLGraphics.switchMode(s, 0),
                o.type === e.Graphics.RECT ? e.WebGLGraphics.buildRectangle(o, n) : o.type === e.Graphics.CIRC || o.type === e.Graphics.ELIP ? e.WebGLGraphics.buildCircle(o, n) : o.type === e.Graphics.RREC && e.WebGLGraphics.buildRoundedRectangle(o, n);
                s.lastIndex++
            }
            for (a = 0; a < s.data.length; a++) n = s.data[a],
            n.dirty && n.upload()
        },
        e.WebGLGraphics.switchMode = function(t, i) {
            var s;
            return t.data.length ? (s = t.data[t.data.length - 1], (s.mode !== i || 1 === i) && (s = e.WebGLGraphics.graphicsDataPool.pop() || new e.WebGLGraphicsData(t.gl), s.mode = i, t.data.push(s))) : (s = e.WebGLGraphics.graphicsDataPool.pop() || new e.WebGLGraphicsData(t.gl), s.mode = i, t.data.push(s)),
            s.dirty = !0,
            s
        },
        e.WebGLGraphics.buildRectangle = function(t, i) {
            var s = t.shape,
            a = s.x,
            r = s.y,
            n = s.width,
            o = s.height;
            if (t.fill) {
                var h = e.hex2rgb(t.fillColor),
                l = t.fillAlpha,
                d = h[0] * l,
                u = h[1] * l,
                c = h[2] * l,
                m = i.points,
                p = i.indices,
                g = m.length / 6;
                m.push(a, r),
                m.push(d, u, c, l),
                m.push(a + n, r),
                m.push(d, u, c, l),
                m.push(a, r + o),
                m.push(d, u, c, l),
                m.push(a + n, r + o),
                m.push(d, u, c, l),
                p.push(g, g, g + 1, g + 2, g + 3, g + 3)
            }
            if (t.lineWidth) {
                var f = t.points;
                t.points = [a, r, a + n, r, a + n, r + o, a, r + o, a, r],
                e.WebGLGraphics.buildLine(t, i),
                t.points = f
            }
        },
        e.WebGLGraphics.buildRoundedRectangle = function(t, i) {
            var s = t.shape,
            a = s.x,
            r = s.y,
            n = s.width,
            o = s.height,
            h = s.radius,
            l = [];
            if (l.push(a, r + h), l = l.concat(e.WebGLGraphics.quadraticBezierCurve(a, r + o - h, a, r + o, a + h, r + o)), l = l.concat(e.WebGLGraphics.quadraticBezierCurve(a + n - h, r + o, a + n, r + o, a + n, r + o - h)), l = l.concat(e.WebGLGraphics.quadraticBezierCurve(a + n, r + h, a + n, r, a + n - h, r)), l = l.concat(e.WebGLGraphics.quadraticBezierCurve(a + h, r, a, r, a, r + h)), t.fill) {
                var d = e.hex2rgb(t.fillColor),
                u = t.fillAlpha,
                c = d[0] * u,
                m = d[1] * u,
                p = d[2] * u,
                g = i.points,
                f = i.indices,
                v = g.length / 6,
                x = e.PolyK.Triangulate(l),
                y = 0;
                for (y = 0; y < x.length; y += 3) f.push(x[y] + v),
                f.push(x[y] + v),
                f.push(x[y + 1] + v),
                f.push(x[y + 2] + v),
                f.push(x[y + 2] + v);
                for (y = 0; y < l.length; y++) g.push(l[y], l[++y], c, m, p, u)
            }
            if (t.lineWidth) {
                var b = t.points;
                t.points = l,
                e.WebGLGraphics.buildLine(t, i),
                t.points = b
            }
        },
        e.WebGLGraphics.quadraticBezierCurve = function(t, e, i, s, a, r) {
            function n(t, e, i) {
                var s = e - t;
                return t + s * i
            }
            for (var o, h, l, d, u, c, m = 20,
            p = [], g = 0, f = 0; m >= f; f++) g = f / m,
            o = n(t, i, g),
            h = n(e, s, g),
            l = n(i, a, g),
            d = n(s, r, g),
            u = n(o, l, g),
            c = n(h, d, g),
            p.push(u, c);
            return p
        },
        e.WebGLGraphics.buildCircle = function(t, i) {
            var s, a, r = t.shape,
            n = r.x,
            o = r.y;
            t.type === e.Graphics.CIRC ? (s = r.radius, a = r.radius) : (s = r.width, a = r.height);
            var h = 40,
            l = 2 * Math.PI / h,
            d = 0;
            if (t.fill) {
                var u = e.hex2rgb(t.fillColor),
                c = t.fillAlpha,
                m = u[0] * c,
                p = u[1] * c,
                g = u[2] * c,
                f = i.points,
                v = i.indices,
                x = f.length / 6;
                for (v.push(x), d = 0; h + 1 > d; d++) f.push(n, o, m, p, g, c),
                f.push(n + Math.sin(l * d) * s, o + Math.cos(l * d) * a, m, p, g, c),
                v.push(x++, x++);
                v.push(x - 1)
            }
            if (t.lineWidth) {
                var y = t.points;
                for (t.points = [], d = 0; h + 1 > d; d++) t.points.push(n + Math.sin(l * d) * s, o + Math.cos(l * d) * a);
                e.WebGLGraphics.buildLine(t, i),
                t.points = y
            }
        },
        e.WebGLGraphics.buildLine = function(t, i) {
            var s = 0,
            a = t.points;
            if (0 !== a.length) {
                if (t.lineWidth % 2) for (s = 0; s < a.length; s++) a[s] += .5;
                var r = new e.Point(a[0], a[1]),
                n = new e.Point(a[a.length - 2], a[a.length - 1]);
                if (r.x === n.x && r.y === n.y) {
                    a = a.slice(),
                    a.pop(),
                    a.pop(),
                    n = new e.Point(a[a.length - 2], a[a.length - 1]);
                    var o = n.x + .5 * (r.x - n.x),
                    h = n.y + .5 * (r.y - n.y);
                    a.unshift(o, h),
                    a.push(o, h)
                }
                var l, d, u, c, m, p, g, f, v, x, y, b, w, S, A, P, T, C, M, G, E, j, I, R = i.points,
                _ = i.indices,
                L = a.length / 2,
                F = a.length,
                B = R.length / 6,
                O = t.lineWidth / 2,
                D = e.hex2rgb(t.lineColor),
                k = t.lineAlpha,
                U = D[0] * k,
                N = D[1] * k,
                z = D[2] * k;
                for (u = a[0], c = a[1], m = a[2], p = a[3], v = -(c - p), x = u - m, I = Math.sqrt(v * v + x * x), v /= I, x /= I, v *= O, x *= O, R.push(u - v, c - x, U, N, z, k), R.push(u + v, c + x, U, N, z, k), s = 1; L - 1 > s; s++) u = a[2 * (s - 1)],
                c = a[2 * (s - 1) + 1],
                m = a[2 * s],
                p = a[2 * s + 1],
                g = a[2 * (s + 1)],
                f = a[2 * (s + 1) + 1],
                v = -(c - p),
                x = u - m,
                I = Math.sqrt(v * v + x * x),
                v /= I,
                x /= I,
                v *= O,
                x *= O,
                y = -(p - f),
                b = m - g,
                I = Math.sqrt(y * y + b * b),
                y /= I,
                b /= I,
                y *= O,
                b *= O,
                A = -x + c - ( - x + p),
                P = -v + m - ( - v + u),
                T = ( - v + u) * ( - x + p) - ( - v + m) * ( - x + c),
                C = -b + f - ( - b + p),
                M = -y + m - ( - y + g),
                G = ( - y + g) * ( - b + p) - ( - y + m) * ( - b + f),
                E = A * M - C * P,
                Math.abs(E) < 1e-5 ? (E += 10.00001, R.push(m - v, p - x, U, N, z, k), R.push(m + v, p + x, U, N, z, k)) : (l = (P * G - M * T) / E, d = (C * T - A * G) / E, j = (l - m) * (l - m) + (d - p) + (d - p), j > 19600 ? (w = v - y, S = x - b, I = Math.sqrt(w * w + S * S), w /= I, S /= I, w *= O, S *= O, R.push(m - w, p - S), R.push(U, N, z, k), R.push(m + w, p + S), R.push(U, N, z, k), R.push(m - w, p - S), R.push(U, N, z, k), F++) : (R.push(l, d), R.push(U, N, z, k), R.push(m - (l - m), p - (d - p)), R.push(U, N, z, k)));
                for (u = a[2 * (L - 2)], c = a[2 * (L - 2) + 1], m = a[2 * (L - 1)], p = a[2 * (L - 1) + 1], v = -(c - p), x = u - m, I = Math.sqrt(v * v + x * x), v /= I, x /= I, v *= O, x *= O, R.push(m - v, p - x), R.push(U, N, z, k), R.push(m + v, p + x), R.push(U, N, z, k), _.push(B), s = 0; F > s; s++) _.push(B++);
                _.push(B - 1)
            }
        },
        e.WebGLGraphics.buildComplexPoly = function(t, i) {
            var s = t.points.slice();
            if (! (s.length < 6)) {
                var a = i.indices;
                i.points = s,
                i.alpha = t.fillAlpha,
                i.color = e.hex2rgb(t.fillColor);
                for (var r, n, o = 1 / 0,
                h = -(1 / 0), l = 1 / 0, d = -(1 / 0), u = 0; u < s.length; u += 2) r = s[u],
                n = s[u + 1],
                o = o > r ? r: o,
                h = r > h ? r: h,
                l = l > n ? n: l,
                d = n > d ? n: d;
                s.push(o, l, h, l, h, d, o, d);
                var c = s.length / 2;
                for (u = 0; c > u; u++) a.push(u)
            }
        },
        e.WebGLGraphics.buildPoly = function(t, i) {
            var s = t.points;
            if (! (s.length < 6)) {
                var a = i.points,
                r = i.indices,
                n = s.length / 2,
                o = e.hex2rgb(t.fillColor),
                h = t.fillAlpha,
                l = o[0] * h,
                d = o[1] * h,
                u = o[2] * h,
                c = e.PolyK.Triangulate(s);
                if (!c) return ! 1;
                var m = a.length / 6,
                p = 0;
                for (p = 0; p < c.length; p += 3) r.push(c[p] + m),
                r.push(c[p] + m),
                r.push(c[p + 1] + m),
                r.push(c[p + 2] + m),
                r.push(c[p + 2] + m);
                for (p = 0; n > p; p++) a.push(s[2 * p], s[2 * p + 1], l, d, u, h);
                return ! 0
            }
        },
        e.WebGLGraphics.graphicsDataPool = [],
        e.WebGLGraphicsData = function(t) {
            this.gl = t,
            this.color = [0, 0, 0],
            this.points = [],
            this.indices = [],
            this.buffer = t.createBuffer(),
            this.indexBuffer = t.createBuffer(),
            this.mode = 1,
            this.alpha = 1,
            this.dirty = !0
        },
        e.WebGLGraphicsData.prototype.reset = function() {
            this.points = [],
            this.indices = []
        },
        e.WebGLGraphicsData.prototype.upload = function() {
            var t = this.gl;
            this.glPoints = new e.Float32Array(this.points),
            t.bindBuffer(t.ARRAY_BUFFER, this.buffer),
            t.bufferData(t.ARRAY_BUFFER, this.glPoints, t.STATIC_DRAW),
            this.glIndicies = new e.Uint16Array(this.indices),
            t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, this.indexBuffer),
            t.bufferData(t.ELEMENT_ARRAY_BUFFER, this.glIndicies, t.STATIC_DRAW),
            this.dirty = !1
        },
        e.glContexts = [],
        e.instances = [],
        e.WebGLRenderer = function(t, i, s) {
            if (s) for (var a in e.defaultRenderOptions)"undefined" == typeof s[a] && (s[a] = e.defaultRenderOptions[a]);
            else s = e.defaultRenderOptions;
            e.defaultRenderer || (e.sayHello("webGL"), e.defaultRenderer = this),
            this.type = e.WEBGL_RENDERER,
            this.resolution = s.resolution,
            this.transparent = s.transparent,
            this.autoResize = s.autoResize || !1,
            this.preserveDrawingBuffer = s.preserveDrawingBuffer,
            this.clearBeforeRender = s.clearBeforeRender,
            this.width = t || 800,
            this.height = i || 600,
            this.view = s.view || document.createElement("canvas"),
            this.contextLostBound = this.handleContextLost.bind(this),
            this.contextRestoredBound = this.handleContextRestored.bind(this),
            this.view.addEventListener("webglcontextlost", this.contextLostBound, !1),
            this.view.addEventListener("webglcontextrestored", this.contextRestoredBound, !1),
            this._contextOptions = {
                alpha: this.transparent,
                antialias: s.antialias,
                premultipliedAlpha: this.transparent && "notMultiplied" !== this.transparent,
                stencil: !0,
                preserveDrawingBuffer: s.preserveDrawingBuffer
            },
            this.projection = new e.Point,
            this.offset = new e.Point(0, 0),
            this.shaderManager = new e.WebGLShaderManager,
            this.spriteBatch = new e.WebGLSpriteBatch,
            this.maskManager = new e.WebGLMaskManager,
            this.filterManager = new e.WebGLFilterManager,
            this.stencilManager = new e.WebGLStencilManager,
            this.blendModeManager = new e.WebGLBlendModeManager,
            this.renderSession = {},
            this.renderSession.gl = this.gl,
            this.renderSession.drawCount = 0,
            this.renderSession.shaderManager = this.shaderManager,
            this.renderSession.maskManager = this.maskManager,
            this.renderSession.filterManager = this.filterManager,
            this.renderSession.blendModeManager = this.blendModeManager,
            this.renderSession.spriteBatch = this.spriteBatch,
            this.renderSession.stencilManager = this.stencilManager,
            this.renderSession.renderer = this,
            this.renderSession.resolution = this.resolution,
            this.initContext(),
            this.mapBlendModes()
        },
        e.WebGLRenderer.prototype.constructor = e.WebGLRenderer,
        e.WebGLRenderer.prototype.initContext = function() {
            var t = this.view.getContext("webgl", this._contextOptions) || this.view.getContext("experimental-webgl", this._contextOptions);
            if (this.gl = t, !t) throw new Error("This browser does not support webGL. Try using the canvas renderer");
            this.glContextId = t.id = e.WebGLRenderer.glContextId++,
            e.glContexts[this.glContextId] = t,
            e.instances[this.glContextId] = this,
            t.disable(t.DEPTH_TEST),
            t.disable(t.CULL_FACE),
            t.enable(t.BLEND),
            this.shaderManager.setContext(t),
            this.spriteBatch.setContext(t),
            this.maskManager.setContext(t),
            this.filterManager.setContext(t),
            this.blendModeManager.setContext(t),
            this.stencilManager.setContext(t),
            this.renderSession.gl = this.gl,
            this.resize(this.width, this.height)
        },
        e.WebGLRenderer.prototype.render = function(t) {
            if (!this.contextLost) {
                this.__stage !== t && (t.interactive && t.interactionManager.removeEvents(), this.__stage = t),
                t.updateTransform();
                var e = this.gl;
                t._interactive ? t._interactiveEventsAdded || (t._interactiveEventsAdded = !0, t.interactionManager.setTarget(this)) : t._interactiveEventsAdded && (t._interactiveEventsAdded = !1, t.interactionManager.setTarget(this)),
                e.viewport(0, 0, this.width, this.height),
                e.bindFramebuffer(e.FRAMEBUFFER, null),
                this.clearBeforeRender && (this.transparent ? e.clearColor(0, 0, 0, 0) : e.clearColor(t.backgroundColorSplit[0], t.backgroundColorSplit[1], t.backgroundColorSplit[2], 1), e.clear(e.COLOR_BUFFER_BIT)),
                this.renderDisplayObject(t, this.projection)
            }
        },
        e.WebGLRenderer.prototype.renderDisplayObject = function(t, i, s) {
            this.renderSession.blendModeManager.setBlendMode(e.blendModes.NORMAL),
            this.renderSession.drawCount = 0,
            this.renderSession.flipY = s ? -1 : 1,
            this.renderSession.projection = i,
            this.renderSession.offset = this.offset,
            this.spriteBatch.begin(this.renderSession),
            this.filterManager.begin(this.renderSession, s),
            t._renderWebGL(this.renderSession),
            this.spriteBatch.end()
        },
        e.WebGLRenderer.prototype.resize = function(t, e) {
            this.width = t * this.resolution,
            this.height = e * this.resolution,
            this.view.width = this.width,
            this.view.height = this.height,
            this.autoResize && (this.view.style.width = this.width / this.resolution + "px", this.view.style.height = this.height / this.resolution + "px"),
            this.gl.viewport(0, 0, this.width, this.height),
            this.projection.x = this.width / 2 / this.resolution,
            this.projection.y = -this.height / 2 / this.resolution
        },
        e.WebGLRenderer.prototype.updateTexture = function(t) {
            if (t.hasLoaded) {
                var i = this.gl;
                return t._glTextures[i.id] || (t._glTextures[i.id] = i.createTexture()),
                i.bindTexture(i.TEXTURE_2D, t._glTextures[i.id]),
                i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, t.premultipliedAlpha),
                i.texImage2D(i.TEXTURE_2D, 0, i.RGBA, i.RGBA, i.UNSIGNED_BYTE, t.source),
                i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MAG_FILTER, t.scaleMode === e.scaleModes.LINEAR ? i.LINEAR: i.NEAREST),
                t.mipmap && e.isPowerOfTwo(t.width, t.height) ? (i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MIN_FILTER, t.scaleMode === e.scaleModes.LINEAR ? i.LINEAR_MIPMAP_LINEAR: i.NEAREST_MIPMAP_NEAREST), i.generateMipmap(i.TEXTURE_2D)) : i.texParameteri(i.TEXTURE_2D, i.TEXTURE_MIN_FILTER, t.scaleMode === e.scaleModes.LINEAR ? i.LINEAR: i.NEAREST),
                t._powerOf2 ? (i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_S, i.REPEAT), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_T, i.REPEAT)) : (i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_S, i.CLAMP_TO_EDGE), i.texParameteri(i.TEXTURE_2D, i.TEXTURE_WRAP_T, i.CLAMP_TO_EDGE)),
                t._dirty[i.id] = !1,
                t._glTextures[i.id]
            }
        },
        e.WebGLRenderer.prototype.handleContextLost = function(t) {
            t.preventDefault(),
            this.contextLost = !0
        },
        e.WebGLRenderer.prototype.handleContextRestored = function() {
            this.initContext();
            for (var t in e.TextureCache) {
                var i = e.TextureCache[t].baseTexture;
                i._glTextures = []
            }
            this.contextLost = !1
        },
        e.WebGLRenderer.prototype.destroy = function() {
            this.view.removeEventListener("webglcontextlost", this.contextLostBound),
            this.view.removeEventListener("webglcontextrestored", this.contextRestoredBound),
            e.glContexts[this.glContextId] = null,
            this.projection = null,
            this.offset = null,
            this.shaderManager.destroy(),
            this.spriteBatch.destroy(),
            this.maskManager.destroy(),
            this.filterManager.destroy(),
            this.shaderManager = null,
            this.spriteBatch = null,
            this.maskManager = null,
            this.filterManager = null,
            this.gl = null,
            this.renderSession = null
        },
        e.WebGLRenderer.prototype.mapBlendModes = function() {
            var t = this.gl;
            e.blendModesWebGL || (e.blendModesWebGL = [], e.blendModesWebGL[e.blendModes.NORMAL] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.ADD] = [t.SRC_ALPHA, t.DST_ALPHA], e.blendModesWebGL[e.blendModes.MULTIPLY] = [t.DST_COLOR, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.SCREEN] = [t.SRC_ALPHA, t.ONE], e.blendModesWebGL[e.blendModes.OVERLAY] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.DARKEN] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.LIGHTEN] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.COLOR_DODGE] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.COLOR_BURN] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.HARD_LIGHT] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.SOFT_LIGHT] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.DIFFERENCE] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.EXCLUSION] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.HUE] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.SATURATION] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.COLOR] = [t.ONE, t.ONE_MINUS_SRC_ALPHA], e.blendModesWebGL[e.blendModes.LUMINOSITY] = [t.ONE, t.ONE_MINUS_SRC_ALPHA])
        },
        e.WebGLRenderer.glContextId = 0,
        e.WebGLBlendModeManager = function() {
            this.currentBlendMode = 99999
        },
        e.WebGLBlendModeManager.prototype.constructor = e.WebGLBlendModeManager,
        e.WebGLBlendModeManager.prototype.setContext = function(t) {
            this.gl = t
        },
        e.WebGLBlendModeManager.prototype.setBlendMode = function(t) {
            if (this.currentBlendMode === t) return ! 1;
            this.currentBlendMode = t;
            var i = e.blendModesWebGL[this.currentBlendMode];
            return this.gl.blendFunc(i[0], i[1]),
            !0
        },
        e.WebGLBlendModeManager.prototype.destroy = function() {
            this.gl = null
        },
        e.WebGLMaskManager = function() {},
        e.WebGLMaskManager.prototype.constructor = e.WebGLMaskManager,
        e.WebGLMaskManager.prototype.setContext = function(t) {
            this.gl = t
        },
        e.WebGLMaskManager.prototype.pushMask = function(t, i) {
            var s = i.gl;
            t.dirty && e.WebGLGraphics.updateGraphics(t, s),
            t._webGL[s.id].data.length && i.stencilManager.pushStencil(t, t._webGL[s.id].data[0], i)
        },
        e.WebGLMaskManager.prototype.popMask = function(t, e) {
            var i = this.gl;
            e.stencilManager.popStencil(t, t._webGL[i.id].data[0], e)
        },
        e.WebGLMaskManager.prototype.destroy = function() {
            this.gl = null
        },
        e.WebGLStencilManager = function() {
            this.stencilStack = [],
            this.reverse = !0,
            this.count = 0
        },
        e.WebGLStencilManager.prototype.setContext = function(t) {
            this.gl = t
        },
        e.WebGLStencilManager.prototype.pushStencil = function(t, e, i) {
            var s = this.gl;
            this.bindGraphics(t, e, i),
            0 === this.stencilStack.length && (s.enable(s.STENCIL_TEST), s.clear(s.STENCIL_BUFFER_BIT), this.reverse = !0, this.count = 0),
            this.stencilStack.push(e);
            var a = this.count;
            s.colorMask(!1, !1, !1, !1),
            s.stencilFunc(s.ALWAYS, 0, 255),
            s.stencilOp(s.KEEP, s.KEEP, s.INVERT),
            1 === e.mode ? (s.drawElements(s.TRIANGLE_FAN, e.indices.length - 4, s.UNSIGNED_SHORT, 0), this.reverse ? (s.stencilFunc(s.EQUAL, 255 - a, 255), s.stencilOp(s.KEEP, s.KEEP, s.DECR)) : (s.stencilFunc(s.EQUAL, a, 255), s.stencilOp(s.KEEP, s.KEEP, s.INCR)), s.drawElements(s.TRIANGLE_FAN, 4, s.UNSIGNED_SHORT, 2 * (e.indices.length - 4)), this.reverse ? s.stencilFunc(s.EQUAL, 255 - (a + 1), 255) : s.stencilFunc(s.EQUAL, a + 1, 255), this.reverse = !this.reverse) : (this.reverse ? (s.stencilFunc(s.EQUAL, a, 255), s.stencilOp(s.KEEP, s.KEEP, s.INCR)) : (s.stencilFunc(s.EQUAL, 255 - a, 255), s.stencilOp(s.KEEP, s.KEEP, s.DECR)), s.drawElements(s.TRIANGLE_STRIP, e.indices.length, s.UNSIGNED_SHORT, 0), this.reverse ? s.stencilFunc(s.EQUAL, a + 1, 255) : s.stencilFunc(s.EQUAL, 255 - (a + 1), 255)),
            s.colorMask(!0, !0, !0, !0),
            s.stencilOp(s.KEEP, s.KEEP, s.KEEP),
            this.count++
        },
        e.WebGLStencilManager.prototype.bindGraphics = function(t, i, s) {
            this._currentGraphics = t;
            var a, r = this.gl,
            n = s.projection,
            o = s.offset;
            1 === i.mode ? (a = s.shaderManager.complexPrimitiveShader, s.shaderManager.setShader(a), r.uniform1f(a.flipY, s.flipY), r.uniformMatrix3fv(a.translationMatrix, !1, t.worldTransform.toArray(!0)), r.uniform2f(a.projectionVector, n.x, -n.y), r.uniform2f(a.offsetVector, -o.x, -o.y), r.uniform3fv(a.tintColor, e.hex2rgb(t.tint)), r.uniform3fv(a.color, i.color), r.uniform1f(a.alpha, t.worldAlpha * i.alpha), r.bindBuffer(r.ARRAY_BUFFER, i.buffer), r.vertexAttribPointer(a.aVertexPosition, 2, r.FLOAT, !1, 8, 0), r.bindBuffer(r.ELEMENT_ARRAY_BUFFER, i.indexBuffer)) : (a = s.shaderManager.primitiveShader, s.shaderManager.setShader(a), r.uniformMatrix3fv(a.translationMatrix, !1, t.worldTransform.toArray(!0)), r.uniform1f(a.flipY, s.flipY), r.uniform2f(a.projectionVector, n.x, -n.y), r.uniform2f(a.offsetVector, -o.x, -o.y), r.uniform3fv(a.tintColor, e.hex2rgb(t.tint)), r.uniform1f(a.alpha, t.worldAlpha), r.bindBuffer(r.ARRAY_BUFFER, i.buffer), r.vertexAttribPointer(a.aVertexPosition, 2, r.FLOAT, !1, 24, 0), r.vertexAttribPointer(a.colorAttribute, 4, r.FLOAT, !1, 24, 8), r.bindBuffer(r.ELEMENT_ARRAY_BUFFER, i.indexBuffer))
        },
        e.WebGLStencilManager.prototype.popStencil = function(t, e, i) {
            var s = this.gl;
            if (this.stencilStack.pop(), this.count--, 0 === this.stencilStack.length) s.disable(s.STENCIL_TEST);
            else {
                var a = this.count;
                this.bindGraphics(t, e, i),
                s.colorMask(!1, !1, !1, !1),
                1 === e.mode ? (this.reverse = !this.reverse, this.reverse ? (s.stencilFunc(s.EQUAL, 255 - (a + 1), 255), s.stencilOp(s.KEEP, s.KEEP, s.INCR)) : (s.stencilFunc(s.EQUAL, a + 1, 255), s.stencilOp(s.KEEP, s.KEEP, s.DECR)), s.drawElements(s.TRIANGLE_FAN, 4, s.UNSIGNED_SHORT, 2 * (e.indices.length - 4)), s.stencilFunc(s.ALWAYS, 0, 255), s.stencilOp(s.KEEP, s.KEEP, s.INVERT), s.drawElements(s.TRIANGLE_FAN, e.indices.length - 4, s.UNSIGNED_SHORT, 0), this.reverse ? s.stencilFunc(s.EQUAL, a, 255) : s.stencilFunc(s.EQUAL, 255 - a, 255)) : (this.reverse ? (s.stencilFunc(s.EQUAL, a + 1, 255), s.stencilOp(s.KEEP, s.KEEP, s.DECR)) : (s.stencilFunc(s.EQUAL, 255 - (a + 1), 255), s.stencilOp(s.KEEP, s.KEEP, s.INCR)), s.drawElements(s.TRIANGLE_STRIP, e.indices.length, s.UNSIGNED_SHORT, 0), this.reverse ? s.stencilFunc(s.EQUAL, a, 255) : s.stencilFunc(s.EQUAL, 255 - a, 255)),
                s.colorMask(!0, !0, !0, !0),
                s.stencilOp(s.KEEP, s.KEEP, s.KEEP)
            }
        },
        e.WebGLStencilManager.prototype.destroy = function() {
            this.stencilStack = null,
            this.gl = null
        },
        e.WebGLShaderManager = function() {
            this.maxAttibs = 10,
            this.attribState = [],
            this.tempAttribState = [];
            for (var t = 0; t < this.maxAttibs; t++) this.attribState[t] = !1;
            this.stack = []
        },
        e.WebGLShaderManager.prototype.constructor = e.WebGLShaderManager,
        e.WebGLShaderManager.prototype.setContext = function(t) {
            this.gl = t,
            this.primitiveShader = new e.PrimitiveShader(t),
            this.complexPrimitiveShader = new e.ComplexPrimitiveShader(t),
            this.defaultShader = new e.PixiShader(t),
            this.fastShader = new e.PixiFastShader(t),
            this.stripShader = new e.StripShader(t),
            this.setShader(this.defaultShader)
        },
        e.WebGLShaderManager.prototype.setAttribs = function(t) {
            var e;
            for (e = 0; e < this.tempAttribState.length; e++) this.tempAttribState[e] = !1;
            for (e = 0; e < t.length; e++) {
                var i = t[e];
                this.tempAttribState[i] = !0
            }
            var s = this.gl;
            for (e = 0; e < this.attribState.length; e++) this.attribState[e] !== this.tempAttribState[e] && (this.attribState[e] = this.tempAttribState[e], this.tempAttribState[e] ? s.enableVertexAttribArray(e) : s.disableVertexAttribArray(e))
        },
        e.WebGLShaderManager.prototype.setShader = function(t) {
            return this._currentId === t._UID ? !1 : (this._currentId = t._UID, this.currentShader = t, this.gl.useProgram(t.program), this.setAttribs(t.attributes), !0)
        },
        e.WebGLShaderManager.prototype.destroy = function() {
            this.attribState = null,
            this.tempAttribState = null,
            this.primitiveShader.destroy(),
            this.complexPrimitiveShader.destroy(),
            this.defaultShader.destroy(),
            this.fastShader.destroy(),
            this.stripShader.destroy(),
            this.gl = null
        },
        e.WebGLSpriteBatch = function() {
            this.vertSize = 5,
            this.size = 2e3;
            var t = 4 * this.size * 4 * this.vertSize,
            i = 6 * this.size;
            this.vertices = new e.ArrayBuffer(t),
            this.positions = new e.Float32Array(this.vertices),
            this.colors = new e.Uint32Array(this.vertices),
            this.indices = new e.Uint16Array(i),
            this.lastIndexCount = 0;
            for (var s = 0,
            a = 0; i > s; s += 6, a += 4) this.indices[s + 0] = a + 0,
            this.indices[s + 1] = a + 1,
            this.indices[s + 2] = a + 2,
            this.indices[s + 3] = a + 0,
            this.indices[s + 4] = a + 2,
            this.indices[s + 5] = a + 3;
            this.drawing = !1,
            this.currentBatchSize = 0,
            this.currentBaseTexture = null,
            this.dirty = !0,
            this.textures = [],
            this.blendModes = [],
            this.shaders = [],
            this.sprites = [],
            this.defaultShader = new e.AbstractFilter(["precision lowp float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"])
        },
        e.WebGLSpriteBatch.prototype.setContext = function(t) {
            this.gl = t,
            this.vertexBuffer = t.createBuffer(),
            this.indexBuffer = t.createBuffer(),
            t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, this.indexBuffer),
            t.bufferData(t.ELEMENT_ARRAY_BUFFER, this.indices, t.STATIC_DRAW),
            t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer),
            t.bufferData(t.ARRAY_BUFFER, this.vertices, t.DYNAMIC_DRAW),
            this.currentBlendMode = 99999;
            var i = new e.PixiShader(t);
            i.fragmentSrc = this.defaultShader.fragmentSrc,
            i.uniforms = {},
            i.init(),
            this.defaultShader.shaders[t.id] = i
        },
        e.WebGLSpriteBatch.prototype.begin = function(t) {
            this.renderSession = t,
            this.shader = this.renderSession.shaderManager.defaultShader,
            this.start()
        },
        e.WebGLSpriteBatch.prototype.end = function() {
            this.flush()
        },
        e.WebGLSpriteBatch.prototype.render = function(t) {
            var e = t.texture;
            this.currentBatchSize >= this.size && (this.flush(), this.currentBaseTexture = e.baseTexture);
            var i = e._uvs;
            if (i) {
                var s, a, r, n, o = t.anchor.x,
                h = t.anchor.y;
                if (e.trim) {
                    var l = e.trim;
                    a = l.x - o * l.width,
                    s = a + e.crop.width,
                    n = l.y - h * l.height,
                    r = n + e.crop.height
                } else s = e.frame.width * (1 - o),
                a = e.frame.width * -o,
                r = e.frame.height * (1 - h),
                n = e.frame.height * -h;
                var d = 4 * this.currentBatchSize * this.vertSize,
                u = e.baseTexture.resolution,
                c = t.worldTransform,
                m = c.a / u,
                p = c.b / u,
                g = c.c / u,
                f = c.d / u,
                v = c.tx,
                x = c.ty,
                y = this.colors,
                b = this.positions;
                this.renderSession.roundPixels ? (b[d] = m * a + g * n + v | 0, b[d + 1] = f * n + p * a + x | 0, b[d + 5] = m * s + g * n + v | 0, b[d + 6] = f * n + p * s + x | 0, b[d + 10] = m * s + g * r + v | 0, b[d + 11] = f * r + p * s + x | 0, b[d + 15] = m * a + g * r + v | 0, b[d + 16] = f * r + p * a + x | 0) : (b[d] = m * a + g * n + v, b[d + 1] = f * n + p * a + x, b[d + 5] = m * s + g * n + v, b[d + 6] = f * n + p * s + x, b[d + 10] = m * s + g * r + v, b[d + 11] = f * r + p * s + x, b[d + 15] = m * a + g * r + v, b[d + 16] = f * r + p * a + x),
                b[d + 2] = i.x0,
                b[d + 3] = i.y0,
                b[d + 7] = i.x1,
                b[d + 8] = i.y1,
                b[d + 12] = i.x2,
                b[d + 13] = i.y2,
                b[d + 17] = i.x3,
                b[d + 18] = i.y3;
                var w = t.tint;
                y[d + 4] = y[d + 9] = y[d + 14] = y[d + 19] = (w >> 16) + (65280 & w) + ((255 & w) << 16) + (255 * t.worldAlpha << 24),
                this.sprites[this.currentBatchSize++] = t
            }
        },
        e.WebGLSpriteBatch.prototype.renderTilingSprite = function(t) {
            var i = t.tilingTexture;
            this.currentBatchSize >= this.size && (this.flush(), this.currentBaseTexture = i.baseTexture),
            t._uvs || (t._uvs = new e.TextureUvs);
            var s = t._uvs;
            t.tilePosition.x %= i.baseTexture.width * t.tileScaleOffset.x,
            t.tilePosition.y %= i.baseTexture.height * t.tileScaleOffset.y;
            var a = t.tilePosition.x / (i.baseTexture.width * t.tileScaleOffset.x),
            r = t.tilePosition.y / (i.baseTexture.height * t.tileScaleOffset.y),
            n = t.width / i.baseTexture.width / (t.tileScale.x * t.tileScaleOffset.x),
            o = t.height / i.baseTexture.height / (t.tileScale.y * t.tileScaleOffset.y);
            s.x0 = 0 - a,
            s.y0 = 0 - r,
            s.x1 = 1 * n - a,
            s.y1 = 0 - r,
            s.x2 = 1 * n - a,
            s.y2 = 1 * o - r,
            s.x3 = 0 - a,
            s.y3 = 1 * o - r;
            var h = t.tint,
            l = (h >> 16) + (65280 & h) + ((255 & h) << 16) + (255 * t.alpha << 24),
            d = this.positions,
            u = this.colors,
            c = t.width,
            m = t.height,
            p = t.anchor.x,
            g = t.anchor.y,
            f = c * (1 - p),
            v = c * -p,
            x = m * (1 - g),
            y = m * -g,
            b = 4 * this.currentBatchSize * this.vertSize,
            w = i.baseTexture.resolution,
            S = t.worldTransform,
            A = S.a / w,
            P = S.b / w,
            T = S.c / w,
            C = S.d / w,
            M = S.tx,
            G = S.ty;
            d[b++] = A * v + T * y + M,
            d[b++] = C * y + P * v + G,
            d[b++] = s.x0,
            d[b++] = s.y0,
            u[b++] = l,
            d[b++] = A * f + T * y + M,
            d[b++] = C * y + P * f + G,
            d[b++] = s.x1,
            d[b++] = s.y1,
            u[b++] = l,
            d[b++] = A * f + T * x + M,
            d[b++] = C * x + P * f + G,
            d[b++] = s.x2,
            d[b++] = s.y2,
            u[b++] = l,
            d[b++] = A * v + T * x + M,
            d[b++] = C * x + P * v + G,
            d[b++] = s.x3,
            d[b++] = s.y3,
            u[b++] = l,
            this.sprites[this.currentBatchSize++] = t
        },
        e.WebGLSpriteBatch.prototype.flush = function() {
            if (0 !== this.currentBatchSize) {
                var t, i = this.gl;
                if (this.dirty) {
                    this.dirty = !1,
                    i.activeTexture(i.TEXTURE0),
                    i.bindBuffer(i.ARRAY_BUFFER, this.vertexBuffer),
                    i.bindBuffer(i.ELEMENT_ARRAY_BUFFER, this.indexBuffer),
                    t = this.defaultShader.shaders[i.id];
                    var s = 4 * this.vertSize;
                    i.vertexAttribPointer(t.aVertexPosition, 2, i.FLOAT, !1, s, 0),
                    i.vertexAttribPointer(t.aTextureCoord, 2, i.FLOAT, !1, s, 8),
                    i.vertexAttribPointer(t.colorAttribute, 4, i.UNSIGNED_BYTE, !0, s, 16)
                }
                if (this.currentBatchSize > .5 * this.size) i.bufferSubData(i.ARRAY_BUFFER, 0, this.vertices);
                else {
                    var a = this.positions.subarray(0, 4 * this.currentBatchSize * this.vertSize);
                    i.bufferSubData(i.ARRAY_BUFFER, 0, a)
                }
                for (var r, n, o, h, l = 0,
                d = 0,
                u = null,
                c = this.renderSession.blendModeManager.currentBlendMode,
                m = null,
                p = !1,
                g = !1,
                f = 0,
                v = this.currentBatchSize; v > f; f++) {
                    if (h = this.sprites[f], r = h.texture.baseTexture, n = h.blendMode, o = h.shader || this.defaultShader, p = c !== n, g = m !== o, (u !== r || p || g) && (this.renderBatch(u, l, d), d = f, l = 0, u = r, p && (c = n, this.renderSession.blendModeManager.setBlendMode(c)), g)) {
                        m = o,
                        t = m.shaders[i.id],
                        t || (t = new e.PixiShader(i), t.fragmentSrc = m.fragmentSrc, t.uniforms = m.uniforms, t.init(), m.shaders[i.id] = t),
                        this.renderSession.shaderManager.setShader(t),
                        t.dirty && t.syncUniforms();
                        var x = this.renderSession.projection;
                        i.uniform2f(t.projectionVector, x.x, x.y);
                        var y = this.renderSession.offset;
                        i.uniform2f(t.offsetVector, y.x, y.y)
                    }
                    l++
                }
                this.renderBatch(u, l, d),
                this.currentBatchSize = 0
            }
        },
        e.WebGLSpriteBatch.prototype.renderBatch = function(t, e, i) {
            if (0 !== e) {
                var s = this.gl;
                t._dirty[s.id] ? this.renderSession.renderer.updateTexture(t) : s.bindTexture(s.TEXTURE_2D, t._glTextures[s.id]),
                s.drawElements(s.TRIANGLES, 6 * e, s.UNSIGNED_SHORT, 6 * i * 2),
                this.renderSession.drawCount++
            }
        },
        e.WebGLSpriteBatch.prototype.stop = function() {
            this.flush(),
            this.dirty = !0
        },
        e.WebGLSpriteBatch.prototype.start = function() {
            this.dirty = !0
        },
        e.WebGLSpriteBatch.prototype.destroy = function() {
            this.vertices = null,
            this.indices = null,
            this.gl.deleteBuffer(this.vertexBuffer),
            this.gl.deleteBuffer(this.indexBuffer),
            this.currentBaseTexture = null,
            this.gl = null
        },
        e.WebGLFastSpriteBatch = function(t) {
            this.vertSize = 10,
            this.maxSize = 6e3,
            this.size = this.maxSize;
            var i = 4 * this.size * this.vertSize,
            s = 6 * this.maxSize;
            this.vertices = new e.Float32Array(i),
            this.indices = new e.Uint16Array(s),
            this.vertexBuffer = null,
            this.indexBuffer = null,
            this.lastIndexCount = 0;
            for (var a = 0,
            r = 0; s > a; a += 6, r += 4) this.indices[a + 0] = r + 0,
            this.indices[a + 1] = r + 1,
            this.indices[a + 2] = r + 2,
            this.indices[a + 3] = r + 0,
            this.indices[a + 4] = r + 2,
            this.indices[a + 5] = r + 3;
            this.drawing = !1,
            this.currentBatchSize = 0,
            this.currentBaseTexture = null,
            this.currentBlendMode = 0,
            this.renderSession = null,
            this.shader = null,
            this.matrix = null,
            this.setContext(t)
        },
        e.WebGLFastSpriteBatch.prototype.constructor = e.WebGLFastSpriteBatch,
        e.WebGLFastSpriteBatch.prototype.setContext = function(t) {
            this.gl = t,
            this.vertexBuffer = t.createBuffer(),
            this.indexBuffer = t.createBuffer(),
            t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, this.indexBuffer),
            t.bufferData(t.ELEMENT_ARRAY_BUFFER, this.indices, t.STATIC_DRAW),
            t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer),
            t.bufferData(t.ARRAY_BUFFER, this.vertices, t.DYNAMIC_DRAW)
        },
        e.WebGLFastSpriteBatch.prototype.begin = function(t, e) {
            this.renderSession = e,
            this.shader = this.renderSession.shaderManager.fastShader,
            this.matrix = t.worldTransform.toArray(!0),
            this.start()
        },
        e.WebGLFastSpriteBatch.prototype.end = function() {
            this.flush()
        },
        e.WebGLFastSpriteBatch.prototype.render = function(t) {
            var e = t.children,
            i = e[0];
            if (i.texture._uvs) {
                this.currentBaseTexture = i.texture.baseTexture,
                i.blendMode !== this.renderSession.blendModeManager.currentBlendMode && (this.flush(), this.renderSession.blendModeManager.setBlendMode(i.blendMode));
                for (var s = 0,
                a = e.length; a > s; s++) this.renderSprite(e[s]);
                this.flush()
            }
        },
        e.WebGLFastSpriteBatch.prototype.renderSprite = function(t) {
            if (t.visible && (t.texture.baseTexture === this.currentBaseTexture || (this.flush(), this.currentBaseTexture = t.texture.baseTexture, t.texture._uvs))) {
                var e, i, s, a, r, n, o, h, l = this.vertices;
                if (e = t.texture._uvs, i = t.texture.frame.width, s = t.texture.frame.height, t.texture.trim) {
                    var d = t.texture.trim;
                    r = d.x - t.anchor.x * d.width,
                    a = r + t.texture.crop.width,
                    o = d.y - t.anchor.y * d.height,
                    n = o + t.texture.crop.height
                } else a = t.texture.frame.width * (1 - t.anchor.x),
                r = t.texture.frame.width * -t.anchor.x,
                n = t.texture.frame.height * (1 - t.anchor.y),
                o = t.texture.frame.height * -t.anchor.y;
                h = 4 * this.currentBatchSize * this.vertSize,
                l[h++] = r,
                l[h++] = o,
                l[h++] = t.position.x,
                l[h++] = t.position.y,
                l[h++] = t.scale.x,
                l[h++] = t.scale.y,
                l[h++] = t.rotation,
                l[h++] = e.x0,
                l[h++] = e.y1,
                l[h++] = t.alpha,
                l[h++] = a,
                l[h++] = o,
                l[h++] = t.position.x,
                l[h++] = t.position.y,
                l[h++] = t.scale.x,
                l[h++] = t.scale.y,
                l[h++] = t.rotation,
                l[h++] = e.x1,
                l[h++] = e.y1,
                l[h++] = t.alpha,
                l[h++] = a,
                l[h++] = n,
                l[h++] = t.position.x,
                l[h++] = t.position.y,
                l[h++] = t.scale.x,
                l[h++] = t.scale.y,
                l[h++] = t.rotation,
                l[h++] = e.x2,
                l[h++] = e.y2,
                l[h++] = t.alpha,
                l[h++] = r,
                l[h++] = n,
                l[h++] = t.position.x,
                l[h++] = t.position.y,
                l[h++] = t.scale.x,
                l[h++] = t.scale.y,
                l[h++] = t.rotation,
                l[h++] = e.x3,
                l[h++] = e.y3,
                l[h++] = t.alpha,
                this.currentBatchSize++,
                this.currentBatchSize >= this.size && this.flush()
            }
        },
        e.WebGLFastSpriteBatch.prototype.flush = function() {
            if (0 !== this.currentBatchSize) {
                var t = this.gl;
                if (this.currentBaseTexture._glTextures[t.id] || this.renderSession.renderer.updateTexture(this.currentBaseTexture, t), t.bindTexture(t.TEXTURE_2D, this.currentBaseTexture._glTextures[t.id]), this.currentBatchSize > .5 * this.size) t.bufferSubData(t.ARRAY_BUFFER, 0, this.vertices);
                else {
                    var e = this.vertices.subarray(0, 4 * this.currentBatchSize * this.vertSize);
                    t.bufferSubData(t.ARRAY_BUFFER, 0, e)
                }
                t.drawElements(t.TRIANGLES, 6 * this.currentBatchSize, t.UNSIGNED_SHORT, 0),
                this.currentBatchSize = 0,
                this.renderSession.drawCount++
            }
        },
        e.WebGLFastSpriteBatch.prototype.stop = function() {
            this.flush()
        },
        e.WebGLFastSpriteBatch.prototype.start = function() {
            var t = this.gl;
            t.activeTexture(t.TEXTURE0),
            t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer),
            t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
            var e = this.renderSession.projection;
            t.uniform2f(this.shader.projectionVector, e.x, e.y),
            t.uniformMatrix3fv(this.shader.uMatrix, !1, this.matrix);
            var i = 4 * this.vertSize;
            t.vertexAttribPointer(this.shader.aVertexPosition, 2, t.FLOAT, !1, i, 0),
            t.vertexAttribPointer(this.shader.aPositionCoord, 2, t.FLOAT, !1, i, 8),
            t.vertexAttribPointer(this.shader.aScale, 2, t.FLOAT, !1, i, 16),
            t.vertexAttribPointer(this.shader.aRotation, 1, t.FLOAT, !1, i, 24),
            t.vertexAttribPointer(this.shader.aTextureCoord, 2, t.FLOAT, !1, i, 28),
            t.vertexAttribPointer(this.shader.colorAttribute, 1, t.FLOAT, !1, i, 36)
        },
        e.WebGLFilterManager = function() {
            this.filterStack = [],
            this.offsetX = 0,
            this.offsetY = 0
        },
        e.WebGLFilterManager.prototype.constructor = e.WebGLFilterManager,
        e.WebGLFilterManager.prototype.setContext = function(t) {
            this.gl = t,
            this.texturePool = [],
            this.initShaderBuffers()
        },
        e.WebGLFilterManager.prototype.begin = function(t, e) {
            this.renderSession = t,
            this.defaultShader = t.shaderManager.defaultShader;
            var i = this.renderSession.projection;
            this.width = 2 * i.x,
            this.height = 2 * -i.y,
            this.buffer = e
        },
        e.WebGLFilterManager.prototype.pushFilter = function(t) {
            var i = this.gl,
            s = this.renderSession.projection,
            a = this.renderSession.offset;
            t._filterArea = t.target.filterArea || t.target.getBounds(),
            this.filterStack.push(t);
            var r = t.filterPasses[0];
            this.offsetX += t._filterArea.x,
            this.offsetY += t._filterArea.y;
            var n = this.texturePool.pop();
            n ? n.resize(this.width, this.height) : n = new e.FilterTexture(this.gl, this.width, this.height),
            i.bindTexture(i.TEXTURE_2D, n.texture);
            var o = t._filterArea,
            h = r.padding;
            o.x -= h,
            o.y -= h,
            o.width += 2 * h,
            o.height += 2 * h,
            o.x < 0 && (o.x = 0),
            o.width > this.width && (o.width = this.width),
            o.y < 0 && (o.y = 0),
            o.height > this.height && (o.height = this.height),
            i.bindFramebuffer(i.FRAMEBUFFER, n.frameBuffer),
            i.viewport(0, 0, o.width, o.height),
            s.x = o.width / 2,
            s.y = -o.height / 2,
            a.x = -o.x,
            a.y = -o.y,
            i.colorMask(!0, !0, !0, !0),
            i.clearColor(0, 0, 0, 0),
            i.clear(i.COLOR_BUFFER_BIT),
            t._glFilterTexture = n
        },
        e.WebGLFilterManager.prototype.popFilter = function() {
            var t = this.gl,
            i = this.filterStack.pop(),
            s = i._filterArea,
            a = i._glFilterTexture,
            r = this.renderSession.projection,
            n = this.renderSession.offset;
            if (i.filterPasses.length > 1) {
                t.viewport(0, 0, s.width, s.height),
                t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer),
                this.vertexArray[0] = 0,
                this.vertexArray[1] = s.height,
                this.vertexArray[2] = s.width,
                this.vertexArray[3] = s.height,
                this.vertexArray[4] = 0,
                this.vertexArray[5] = 0,
                this.vertexArray[6] = s.width,
                this.vertexArray[7] = 0,
                t.bufferSubData(t.ARRAY_BUFFER, 0, this.vertexArray),
                t.bindBuffer(t.ARRAY_BUFFER, this.uvBuffer),
                this.uvArray[2] = s.width / this.width,
                this.uvArray[5] = s.height / this.height,
                this.uvArray[6] = s.width / this.width,
                this.uvArray[7] = s.height / this.height,
                t.bufferSubData(t.ARRAY_BUFFER, 0, this.uvArray);
                var o = a,
                h = this.texturePool.pop();
                h || (h = new e.FilterTexture(this.gl, this.width, this.height)),
                h.resize(this.width, this.height),
                t.bindFramebuffer(t.FRAMEBUFFER, h.frameBuffer),
                t.clear(t.COLOR_BUFFER_BIT),
                t.disable(t.BLEND);
                for (var l = 0; l < i.filterPasses.length - 1; l++) {
                    var d = i.filterPasses[l];
                    t.bindFramebuffer(t.FRAMEBUFFER, h.frameBuffer),
                    t.activeTexture(t.TEXTURE0),
                    t.bindTexture(t.TEXTURE_2D, o.texture),
                    this.applyFilterPass(d, s, s.width, s.height);
                    var u = o;
                    o = h,
                    h = u
                }
                t.enable(t.BLEND),
                a = o,
                this.texturePool.push(h)
            }
            var c = i.filterPasses[i.filterPasses.length - 1];
            this.offsetX -= s.x,
            this.offsetY -= s.y;
            var m = this.width,
            p = this.height,
            g = 0,
            f = 0,
            v = this.buffer;
            if (0 === this.filterStack.length) t.colorMask(!0, !0, !0, !0);
            else {
                var x = this.filterStack[this.filterStack.length - 1];
                s = x._filterArea,
                m = s.width,
                p = s.height,
                g = s.x,
                f = s.y,
                v = x._glFilterTexture.frameBuffer
            }
            r.x = m / 2,
            r.y = -p / 2,
            n.x = g,
            n.y = f,
            s = i._filterArea;
            var y = s.x - g,
            b = s.y - f;
            t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer),
            this.vertexArray[0] = y,
            this.vertexArray[1] = b + s.height,
            this.vertexArray[2] = y + s.width,
            this.vertexArray[3] = b + s.height,
            this.vertexArray[4] = y,
            this.vertexArray[5] = b,
            this.vertexArray[6] = y + s.width,
            this.vertexArray[7] = b,
            t.bufferSubData(t.ARRAY_BUFFER, 0, this.vertexArray),
            t.bindBuffer(t.ARRAY_BUFFER, this.uvBuffer),
            this.uvArray[2] = s.width / this.width,
            this.uvArray[5] = s.height / this.height,
            this.uvArray[6] = s.width / this.width,
            this.uvArray[7] = s.height / this.height,
            t.bufferSubData(t.ARRAY_BUFFER, 0, this.uvArray),
            t.viewport(0, 0, m * this.renderSession.resolution, p * this.renderSession.resolution),
            t.bindFramebuffer(t.FRAMEBUFFER, v),
            t.activeTexture(t.TEXTURE0),
            t.bindTexture(t.TEXTURE_2D, a.texture),
            this.applyFilterPass(c, s, m, p),
            this.texturePool.push(a),
            i._glFilterTexture = null
        },
        e.WebGLFilterManager.prototype.applyFilterPass = function(t, i, s, a) {
            var r = this.gl,
            n = t.shaders[r.id];
            n || (n = new e.PixiShader(r), n.fragmentSrc = t.fragmentSrc, n.uniforms = t.uniforms, n.init(), t.shaders[r.id] = n),
            this.renderSession.shaderManager.setShader(n),
            r.uniform2f(n.projectionVector, s / 2, -a / 2),
            r.uniform2f(n.offsetVector, 0, 0),
            t.uniforms.dimensions && (t.uniforms.dimensions.value[0] = this.width, t.uniforms.dimensions.value[1] = this.height, t.uniforms.dimensions.value[2] = this.vertexArray[0], t.uniforms.dimensions.value[3] = this.vertexArray[5]),
            n.syncUniforms(),
            r.bindBuffer(r.ARRAY_BUFFER, this.vertexBuffer),
            r.vertexAttribPointer(n.aVertexPosition, 2, r.FLOAT, !1, 0, 0),
            r.bindBuffer(r.ARRAY_BUFFER, this.uvBuffer),
            r.vertexAttribPointer(n.aTextureCoord, 2, r.FLOAT, !1, 0, 0),
            r.bindBuffer(r.ARRAY_BUFFER, this.colorBuffer),
            r.vertexAttribPointer(n.colorAttribute, 2, r.FLOAT, !1, 0, 0),
            r.bindBuffer(r.ELEMENT_ARRAY_BUFFER, this.indexBuffer),
            r.drawElements(r.TRIANGLES, 6, r.UNSIGNED_SHORT, 0),
            this.renderSession.drawCount++
        },
        e.WebGLFilterManager.prototype.initShaderBuffers = function() {
            var t = this.gl;
            this.vertexBuffer = t.createBuffer(),
            this.uvBuffer = t.createBuffer(),
            this.colorBuffer = t.createBuffer(),
            this.indexBuffer = t.createBuffer(),
            this.vertexArray = new e.Float32Array([0, 0, 1, 0, 0, 1, 1, 1]),
            t.bindBuffer(t.ARRAY_BUFFER, this.vertexBuffer),
            t.bufferData(t.ARRAY_BUFFER, this.vertexArray, t.STATIC_DRAW),
            this.uvArray = new e.Float32Array([0, 0, 1, 0, 0, 1, 1, 1]),
            t.bindBuffer(t.ARRAY_BUFFER, this.uvBuffer),
            t.bufferData(t.ARRAY_BUFFER, this.uvArray, t.STATIC_DRAW),
            this.colorArray = new e.Float32Array([1, 16777215, 1, 16777215, 1, 16777215, 1, 16777215]),
            t.bindBuffer(t.ARRAY_BUFFER, this.colorBuffer),
            t.bufferData(t.ARRAY_BUFFER, this.colorArray, t.STATIC_DRAW),
            t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, this.indexBuffer),
            t.bufferData(t.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 1, 3, 2]), t.STATIC_DRAW)
        },
        e.WebGLFilterManager.prototype.destroy = function() {
            var t = this.gl;
            this.filterStack = null,
            this.offsetX = 0,
            this.offsetY = 0;
            for (var e = 0; e < this.texturePool.length; e++) this.texturePool[e].destroy();
            this.texturePool = null,
            t.deleteBuffer(this.vertexBuffer),
            t.deleteBuffer(this.uvBuffer),
            t.deleteBuffer(this.colorBuffer),
            t.deleteBuffer(this.indexBuffer)
        },
        e.FilterTexture = function(t, i, s, a) {
            this.gl = t,
            this.frameBuffer = t.createFramebuffer(),
            this.texture = t.createTexture(),
            a = a || e.scaleModes.DEFAULT,
            t.bindTexture(t.TEXTURE_2D, this.texture),
            t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, a === e.scaleModes.LINEAR ? t.LINEAR: t.NEAREST),
            t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, a === e.scaleModes.LINEAR ? t.LINEAR: t.NEAREST),
            t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE),
            t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE),
            t.bindFramebuffer(t.FRAMEBUFFER, this.frameBuffer),
            t.bindFramebuffer(t.FRAMEBUFFER, this.frameBuffer),
            t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, this.texture, 0),
            this.renderBuffer = t.createRenderbuffer(),
            t.bindRenderbuffer(t.RENDERBUFFER, this.renderBuffer),
            t.framebufferRenderbuffer(t.FRAMEBUFFER, t.DEPTH_STENCIL_ATTACHMENT, t.RENDERBUFFER, this.renderBuffer),
            this.resize(i, s)
        },
        e.FilterTexture.prototype.constructor = e.FilterTexture,
        e.FilterTexture.prototype.clear = function() {
            var t = this.gl;
            t.clearColor(0, 0, 0, 0),
            t.clear(t.COLOR_BUFFER_BIT)
        },
        e.FilterTexture.prototype.resize = function(t, e) {
            if (this.width !== t || this.height !== e) {
                this.width = t,
                this.height = e;
                var i = this.gl;
                i.bindTexture(i.TEXTURE_2D, this.texture),
                i.texImage2D(i.TEXTURE_2D, 0, i.RGBA, t, e, 0, i.RGBA, i.UNSIGNED_BYTE, null),
                i.bindRenderbuffer(i.RENDERBUFFER, this.renderBuffer),
                i.renderbufferStorage(i.RENDERBUFFER, i.DEPTH_STENCIL, t, e)
            }
        },
        e.FilterTexture.prototype.destroy = function() {
            var t = this.gl;
            t.deleteFramebuffer(this.frameBuffer),
            t.deleteTexture(this.texture),
            this.frameBuffer = null,
            this.texture = null
        },
        e.CanvasBuffer = function(t, e) {
            this.width = t,
            this.height = e,
            this.canvas = document.createElement("canvas"),
            this.context = this.canvas.getContext("2d"),
            this.canvas.width = t,
            this.canvas.height = e
        },
        e.CanvasBuffer.prototype.constructor = e.CanvasBuffer,
        e.CanvasBuffer.prototype.clear = function() {
            this.context.setTransform(1, 0, 0, 1, 0, 0),
            this.context.clearRect(0, 0, this.width, this.height)
        },
        e.CanvasBuffer.prototype.resize = function(t, e) {
            this.width = this.canvas.width = t,
            this.height = this.canvas.height = e
        },
        e.CanvasMaskManager = function() {},
        e.CanvasMaskManager.prototype.constructor = e.CanvasMaskManager,
        e.CanvasMaskManager.prototype.pushMask = function(t, i) {
            var s = i.context;
            s.save();
            var a = t.alpha,
            r = t.worldTransform,
            n = i.resolution;
            s.setTransform(r.a * n, r.b * n, r.c * n, r.d * n, r.tx * n, r.ty * n),
            e.CanvasGraphics.renderGraphicsMask(t, s),
            s.clip(),
            t.worldAlpha = a
        },
        e.CanvasMaskManager.prototype.popMask = function(t) {
            t.context.restore()
        },
        e.CanvasTinter = function() {},
        e.CanvasTinter.getTintedTexture = function(t, i) {
            var s = t.texture;
            i = e.CanvasTinter.roundColor(i);
            var a = "#" + ("00000" + (0 | i).toString(16)).substr( - 6);
            if (s.tintCache = s.tintCache || {},
            s.tintCache[a]) return s.tintCache[a];
            var r = e.CanvasTinter.canvas || document.createElement("canvas");
            if (e.CanvasTinter.tintMethod(s, i, r), e.CanvasTinter.convertTintToImage) {
                var n = new Image;
                n.src = r.toDataURL(),
                s.tintCache[a] = n
            } else s.tintCache[a] = r,
            e.CanvasTinter.canvas = null;
            return r
        },
        e.CanvasTinter.tintWithMultiply = function(t, e, i) {
            var s = i.getContext("2d"),
            a = t.crop;
            i.width = a.width,
            i.height = a.height,
            s.fillStyle = "#" + ("00000" + (0 | e).toString(16)).substr( - 6),
            s.fillRect(0, 0, a.width, a.height),
            s.globalCompositeOperation = "multiply",
            s.drawImage(t.baseTexture.source, a.x, a.y, a.width, a.height, 0, 0, a.width, a.height),
            s.globalCompositeOperation = "destination-atop",
            s.drawImage(t.baseTexture.source, a.x, a.y, a.width, a.height, 0, 0, a.width, a.height)
        },
        e.CanvasTinter.tintWithOverlay = function(t, e, i) {
            var s = i.getContext("2d"),
            a = t.crop;
            i.width = a.width,
            i.height = a.height,
            s.globalCompositeOperation = "copy",
            s.fillStyle = "#" + ("00000" + (0 | e).toString(16)).substr( - 6),
            s.fillRect(0, 0, a.width, a.height),
            s.globalCompositeOperation = "destination-atop",
            s.drawImage(t.baseTexture.source, a.x, a.y, a.width, a.height, 0, 0, a.width, a.height)
        },
        e.CanvasTinter.tintWithPerPixel = function(t, i, s) {
            var a = s.getContext("2d"),
            r = t.crop;
            s.width = r.width,
            s.height = r.height,
            a.globalCompositeOperation = "copy",
            a.drawImage(t.baseTexture.source, r.x, r.y, r.width, r.height, 0, 0, r.width, r.height);
            for (var n = e.hex2rgb(i), o = n[0], h = n[1], l = n[2], d = a.getImageData(0, 0, r.width, r.height), u = d.data, c = 0; c < u.length; c += 4) u[c + 0] *= o,
            u[c + 1] *= h,
            u[c + 2] *= l;
            a.putImageData(d, 0, 0)
        },
        e.CanvasTinter.roundColor = function(t) {
            var i = e.CanvasTinter.cacheStepsPerColorChannel,
            s = e.hex2rgb(t);
            return s[0] = Math.min(255, s[0] / i * i),
            s[1] = Math.min(255, s[1] / i * i),
            s[2] = Math.min(255, s[2] / i * i),
            e.rgb2hex(s)
        },
        e.CanvasTinter.cacheStepsPerColorChannel = 8,
        e.CanvasTinter.convertTintToImage = !1,
        e.CanvasTinter.canUseMultiply = e.canUseNewCanvasBlendModes(),
        e.CanvasTinter.tintMethod = e.CanvasTinter.canUseMultiply ? e.CanvasTinter.tintWithMultiply: e.CanvasTinter.tintWithPerPixel,
        e.CanvasRenderer = function(t, i, s) {
            if (s) for (var a in e.defaultRenderOptions)"undefined" == typeof s[a] && (s[a] = e.defaultRenderOptions[a]);
            else s = e.defaultRenderOptions;
            e.defaultRenderer || (e.sayHello("Canvas"), e.defaultRenderer = this),
            this.type = e.CANVAS_RENDERER,
            this.resolution = s.resolution,
            this.clearBeforeRender = s.clearBeforeRender,
            this.transparent = s.transparent,
            this.autoResize = s.autoResize || !1,
            this.width = t || 800,
            this.height = i || 600,
            this.width *= this.resolution,
            this.height *= this.resolution,
            this.view = s.view || document.createElement("canvas"),
            this.context = this.view.getContext("2d", {
                alpha: this.transparent
            }),
            this.refresh = !0,
            this.view.width = this.width * this.resolution,
            this.view.height = this.height * this.resolution,
            this.count = 0,
            this.maskManager = new e.CanvasMaskManager,
            this.renderSession = {
                context: this.context,
                maskManager: this.maskManager,
                scaleMode: null,
                smoothProperty: null,
                roundPixels: !1
            },
            this.mapBlendModes(),
            this.resize(t, i),
            "imageSmoothingEnabled" in this.context ? this.renderSession.smoothProperty = "imageSmoothingEnabled": "webkitImageSmoothingEnabled" in this.context ? this.renderSession.smoothProperty = "webkitImageSmoothingEnabled": "mozImageSmoothingEnabled" in this.context ? this.renderSession.smoothProperty = "mozImageSmoothingEnabled": "oImageSmoothingEnabled" in this.context ? this.renderSession.smoothProperty = "oImageSmoothingEnabled": "msImageSmoothingEnabled" in this.context && (this.renderSession.smoothProperty = "msImageSmoothingEnabled")
        },
        e.CanvasRenderer.prototype.constructor = e.CanvasRenderer,
        e.CanvasRenderer.prototype.render = function(t) {
            t.updateTransform(),
            this.context.setTransform(1, 0, 0, 1, 0, 0),
            this.context.globalAlpha = 1,
            this.renderSession.currentBlendMode = e.blendModes.NORMAL,
            this.context.globalCompositeOperation = e.blendModesCanvas[e.blendModes.NORMAL],
            navigator.isCocoonJS && this.view.screencanvas && (this.context.fillStyle = "black", this.context.clear()),
            this.clearBeforeRender && (this.transparent ? this.context.clearRect(0, 0, this.width, this.height) : (this.context.fillStyle = t.backgroundColorString, this.context.fillRect(0, 0, this.width, this.height))),
            this.renderDisplayObject(t),
            t.interactive && (t._interactiveEventsAdded || (t._interactiveEventsAdded = !0, t.interactionManager.setTarget(this)))
        },
        e.CanvasRenderer.prototype.destroy = function(t) {
            "undefined" == typeof t && (t = !0),
            t && this.view.parent && this.view.parent.removeChild(this.view),
            this.view = null,
            this.context = null,
            this.maskManager = null,
            this.renderSession = null
        },
        e.CanvasRenderer.prototype.resize = function(t, e) {
            this.width = t * this.resolution,
            this.height = e * this.resolution,
            this.view.width = this.width,
            this.view.height = this.height,
            this.autoResize && (this.view.style.width = this.width / this.resolution + "px", this.view.style.height = this.height / this.resolution + "px")
        },
        e.CanvasRenderer.prototype.renderDisplayObject = function(t, e) {
            this.renderSession.context = e || this.context,
            this.renderSession.resolution = this.resolution,
            t._renderCanvas(this.renderSession)
        },
        e.CanvasRenderer.prototype.mapBlendModes = function() {
            e.blendModesCanvas || (e.blendModesCanvas = [], e.canUseNewCanvasBlendModes() ? (e.blendModesCanvas[e.blendModes.NORMAL] = "source-over", e.blendModesCanvas[e.blendModes.ADD] = "lighter", e.blendModesCanvas[e.blendModes.MULTIPLY] = "multiply", e.blendModesCanvas[e.blendModes.SCREEN] = "screen", e.blendModesCanvas[e.blendModes.OVERLAY] = "overlay", e.blendModesCanvas[e.blendModes.DARKEN] = "darken", e.blendModesCanvas[e.blendModes.LIGHTEN] = "lighten", e.blendModesCanvas[e.blendModes.COLOR_DODGE] = "color-dodge", e.blendModesCanvas[e.blendModes.COLOR_BURN] = "color-burn", e.blendModesCanvas[e.blendModes.HARD_LIGHT] = "hard-light", e.blendModesCanvas[e.blendModes.SOFT_LIGHT] = "soft-light", e.blendModesCanvas[e.blendModes.DIFFERENCE] = "difference", e.blendModesCanvas[e.blendModes.EXCLUSION] = "exclusion", e.blendModesCanvas[e.blendModes.HUE] = "hue", e.blendModesCanvas[e.blendModes.SATURATION] = "saturation", e.blendModesCanvas[e.blendModes.COLOR] = "color", e.blendModesCanvas[e.blendModes.LUMINOSITY] = "luminosity") : (e.blendModesCanvas[e.blendModes.NORMAL] = "source-over", e.blendModesCanvas[e.blendModes.ADD] = "lighter", e.blendModesCanvas[e.blendModes.MULTIPLY] = "source-over", e.blendModesCanvas[e.blendModes.SCREEN] = "source-over", e.blendModesCanvas[e.blendModes.OVERLAY] = "source-over", e.blendModesCanvas[e.blendModes.DARKEN] = "source-over", e.blendModesCanvas[e.blendModes.LIGHTEN] = "source-over", e.blendModesCanvas[e.blendModes.COLOR_DODGE] = "source-over", e.blendModesCanvas[e.blendModes.COLOR_BURN] = "source-over", e.blendModesCanvas[e.blendModes.HARD_LIGHT] = "source-over", e.blendModesCanvas[e.blendModes.SOFT_LIGHT] = "source-over", e.blendModesCanvas[e.blendModes.DIFFERENCE] = "source-over", e.blendModesCanvas[e.blendModes.EXCLUSION] = "source-over", e.blendModesCanvas[e.blendModes.HUE] = "source-over", e.blendModesCanvas[e.blendModes.SATURATION] = "source-over", e.blendModesCanvas[e.blendModes.COLOR] = "source-over", e.blendModesCanvas[e.blendModes.LUMINOSITY] = "source-over"))
        },
        e.CanvasGraphics = function() {},
        e.CanvasGraphics.renderGraphics = function(t, i) {
            var s = t.worldAlpha;
            t.dirty && (this.updateGraphicsTint(t), t.dirty = !1);
            for (var a = 0; a < t.graphicsData.length; a++) {
                var r = t.graphicsData[a],
                n = r.shape,
                o = r._fillTint,
                h = r._lineTint;
                if (i.lineWidth = r.lineWidth, r.type === e.Graphics.POLY) {
                    i.beginPath();
                    var l = n.points;
                    i.moveTo(l[0], l[1]);
                    for (var d = 1; d < l.length / 2; d++) i.lineTo(l[2 * d], l[2 * d + 1]);
                    n.closed && i.lineTo(l[0], l[1]),
                    l[0] === l[l.length - 2] && l[1] === l[l.length - 1] && i.closePath(),
                    r.fill && (i.globalAlpha = r.fillAlpha * s, i.fillStyle = "#" + ("00000" + (0 | o).toString(16)).substr( - 6), i.fill()),
                    r.lineWidth && (i.globalAlpha = r.lineAlpha * s, i.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr( - 6), i.stroke())
                } else if (r.type === e.Graphics.RECT)(r.fillColor || 0 === r.fillColor) && (i.globalAlpha = r.fillAlpha * s, i.fillStyle = "#" + ("00000" + (0 | o).toString(16)).substr( - 6), i.fillRect(n.x, n.y, n.width, n.height)),
                r.lineWidth && (i.globalAlpha = r.lineAlpha * s, i.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr( - 6), i.strokeRect(n.x, n.y, n.width, n.height));
                else if (r.type === e.Graphics.CIRC) i.beginPath(),
                i.arc(n.x, n.y, n.radius, 0, 2 * Math.PI),
                i.closePath(),
                r.fill && (i.globalAlpha = r.fillAlpha * s, i.fillStyle = "#" + ("00000" + (0 | o).toString(16)).substr( - 6), i.fill()),
                r.lineWidth && (i.globalAlpha = r.lineAlpha * s, i.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr( - 6), i.stroke());
                else if (r.type === e.Graphics.ELIP) {
                    var u = 2 * n.width,
                    c = 2 * n.height,
                    m = n.x - u / 2,
                    p = n.y - c / 2;
                    i.beginPath();
                    var g = .5522848,
                    f = u / 2 * g,
                    v = c / 2 * g,
                    x = m + u,
                    y = p + c,
                    b = m + u / 2,
                    w = p + c / 2;
                    i.moveTo(m, w),
                    i.bezierCurveTo(m, w - v, b - f, p, b, p),
                    i.bezierCurveTo(b + f, p, x, w - v, x, w),
                    i.bezierCurveTo(x, w + v, b + f, y, b, y),
                    i.bezierCurveTo(b - f, y, m, w + v, m, w),
                    i.closePath(),
                    r.fill && (i.globalAlpha = r.fillAlpha * s, i.fillStyle = "#" + ("00000" + (0 | o).toString(16)).substr( - 6), i.fill()),
                    r.lineWidth && (i.globalAlpha = r.lineAlpha * s, i.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr( - 6), i.stroke())
                } else if (r.type === e.Graphics.RREC) {
                    var S = n.x,
                    A = n.y,
                    P = n.width,
                    T = n.height,
                    C = n.radius,
                    M = Math.min(P, T) / 2 | 0;
                    C = C > M ? M: C,
                    i.beginPath(),
                    i.moveTo(S, A + C),
                    i.lineTo(S, A + T - C),
                    i.quadraticCurveTo(S, A + T, S + C, A + T),
                    i.lineTo(S + P - C, A + T),
                    i.quadraticCurveTo(S + P, A + T, S + P, A + T - C),
                    i.lineTo(S + P, A + C),
                    i.quadraticCurveTo(S + P, A, S + P - C, A),
                    i.lineTo(S + C, A),
                    i.quadraticCurveTo(S, A, S, A + C),
                    i.closePath(),
                    (r.fillColor || 0 === r.fillColor) && (i.globalAlpha = r.fillAlpha * s, i.fillStyle = "#" + ("00000" + (0 | o).toString(16)).substr( - 6), i.fill()),
                    r.lineWidth && (i.globalAlpha = r.lineAlpha * s, i.strokeStyle = "#" + ("00000" + (0 | h).toString(16)).substr( - 6), i.stroke())
                }
            }
        },
        e.CanvasGraphics.renderGraphicsMask = function(t, i) {
            var s = t.graphicsData.length;
            if (0 !== s) {
                s > 1 && (s = 1, window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));
                for (var a = 0; 1 > a; a++) {
                    var r = t.graphicsData[a],
                    n = r.shape;
                    if (r.type === e.Graphics.POLY) {
                        i.beginPath();
                        var o = n.points;
                        i.moveTo(o[0], o[1]);
                        for (var h = 1; h < o.length / 2; h++) i.lineTo(o[2 * h], o[2 * h + 1]);
                        o[0] === o[o.length - 2] && o[1] === o[o.length - 1] && i.closePath()
                    } else if (r.type === e.Graphics.RECT) i.beginPath(),
                    i.rect(n.x, n.y, n.width, n.height),
                    i.closePath();
                    else if (r.type === e.Graphics.CIRC) i.beginPath(),
                    i.arc(n.x, n.y, n.radius, 0, 2 * Math.PI),
                    i.closePath();
                    else if (r.type === e.Graphics.ELIP) {
                        var l = 2 * n.width,
                        d = 2 * n.height,
                        u = n.x - l / 2,
                        c = n.y - d / 2;
                        i.beginPath();
                        var m = .5522848,
                        p = l / 2 * m,
                        g = d / 2 * m,
                        f = u + l,
                        v = c + d,
                        x = u + l / 2,
                        y = c + d / 2;
                        i.moveTo(u, y),
                        i.bezierCurveTo(u, y - g, x - p, c, x, c),
                        i.bezierCurveTo(x + p, c, f, y - g, f, y),
                        i.bezierCurveTo(f, y + g, x + p, v, x, v),
                        i.bezierCurveTo(x - p, v, u, y + g, u, y),
                        i.closePath()
                    } else if (r.type === e.Graphics.RREC) {
                        var b = n.points,
                        w = b[0],
                        S = b[1],
                        A = b[2],
                        P = b[3],
                        T = b[4],
                        C = Math.min(A, P) / 2 | 0;
                        T = T > C ? C: T,
                        i.beginPath(),
                        i.moveTo(w, S + T),
                        i.lineTo(w, S + P - T),
                        i.quadraticCurveTo(w, S + P, w + T, S + P),
                        i.lineTo(w + A - T, S + P),
                        i.quadraticCurveTo(w + A, S + P, w + A, S + P - T),
                        i.lineTo(w + A, S + T),
                        i.quadraticCurveTo(w + A, S, w + A - T, S),
                        i.lineTo(w + T, S),
                        i.quadraticCurveTo(w, S, w, S + T),
                        i.closePath()
                    }
                }
            }
        },
        e.CanvasGraphics.updateGraphicsTint = function(t) {
            if (16777215 !== t.tint) for (var e = (t.tint >> 16 & 255) / 255, i = (t.tint >> 8 & 255) / 255, s = (255 & t.tint) / 255, a = 0; a < t.graphicsData.length; a++) {
                var r = t.graphicsData[a],
                n = 0 | r.fillColor,
                o = 0 | r.lineColor;
                r._fillTint = ((n >> 16 & 255) / 255 * e * 255 << 16) + ((n >> 8 & 255) / 255 * i * 255 << 8) + (255 & n) / 255 * s * 255,
                r._lineTint = ((o >> 16 & 255) / 255 * e * 255 << 16) + ((o >> 8 & 255) / 255 * i * 255 << 8) + (255 & o) / 255 * s * 255
            }
        },
        e.Graphics = function() {
            e.DisplayObjectContainer.call(this),
            this.renderable = !0,
            this.fillAlpha = 1,
            this.lineWidth = 0,
            this.lineColor = 0,
            this.graphicsData = [],
            this.tint = 16777215,
            this.blendMode = e.blendModes.NORMAL,
            this.currentPath = null,
            this._webGL = [],
            this.isMask = !1,
            this.boundsPadding = 0,
            this._localBounds = new e.Rectangle(0, 0, 1, 1),
            this.dirty = !0,
            this.webGLDirty = !1,
            this.cachedSpriteDirty = !1
        },
        e.Graphics.prototype = Object.create(e.DisplayObjectContainer.prototype),
        e.Graphics.prototype.constructor = e.Graphics,
        Object.defineProperty(e.Graphics.prototype, "cacheAsBitmap", {
            get: function() {
                return this._cacheAsBitmap
            },
            set: function(t) {
                this._cacheAsBitmap = t,
                this._cacheAsBitmap ? this._generateCachedSprite() : (this.destroyCachedSprite(), this.dirty = !0)
            }
        }),
        e.Graphics.prototype.lineStyle = function(t, i, s) {
            if (this.lineWidth = t || 0, this.lineColor = i || 0, this.lineAlpha = void 0 === s ? 1 : s, this.currentPath) {
                if (this.currentPath.shape.points.length) return this.drawShape(new e.Polygon(this.currentPath.shape.points.slice( - 2))),
                this;
                this.currentPath.lineWidth = this.lineWidth,
                this.currentPath.lineColor = this.lineColor,
                this.currentPath.lineAlpha = this.lineAlpha
            }
            return this
        },
        e.Graphics.prototype.moveTo = function(t, i) {
            return this.drawShape(new e.Polygon([t, i])),
            this
        },
        e.Graphics.prototype.lineTo = function(t, e) {
            return this.currentPath.shape.points.push(t, e),
            this.dirty = !0,
            this
        },
        e.Graphics.prototype.quadraticCurveTo = function(t, e, i, s) {
            this.currentPath ? 0 === this.currentPath.shape.points.length && (this.currentPath.shape.points = [0, 0]) : this.moveTo(0, 0);
            var a, r, n = 20,
            o = this.currentPath.shape.points;
            0 === o.length && this.moveTo(0, 0);
            for (var h = o[o.length - 2], l = o[o.length - 1], d = 0, u = 1; n >= u; u++) d = u / n,
            a = h + (t - h) * d,
            r = l + (e - l) * d,
            o.push(a + (t + (i - t) * d - a) * d, r + (e + (s - e) * d - r) * d);
            return this.dirty = !0,
            this
        },
        e.Graphics.prototype.bezierCurveTo = function(t, e, i, s, a, r) {
            this.currentPath ? 0 === this.currentPath.shape.points.length && (this.currentPath.shape.points = [0, 0]) : this.moveTo(0, 0);
            for (var n, o, h, l, d, u = 20,
            c = this.currentPath.shape.points,
            m = c[c.length - 2], p = c[c.length - 1], g = 0, f = 1; u >= f; f++) g = f / u,
            n = 1 - g,
            o = n * n,
            h = o * n,
            l = g * g,
            d = l * g,
            c.push(h * m + 3 * o * g * t + 3 * n * l * i + d * a, h * p + 3 * o * g * e + 3 * n * l * s + d * r);
            return this.dirty = !0,
            this
        },
        e.Graphics.prototype.arcTo = function(t, e, i, s, a) {
            this.currentPath ? 0 === this.currentPath.shape.points.length && this.currentPath.shape.points.push(t, e) : this.moveTo(t, e);
            var r = this.currentPath.shape.points,
            n = r[r.length - 2],
            o = r[r.length - 1],
            h = o - e,
            l = n - t,
            d = s - e,
            u = i - t,
            c = Math.abs(h * u - l * d);
            if (1e-8 > c || 0 === a)(r[r.length - 2] !== t || r[r.length - 1] !== e) && r.push(t, e);
            else {
                var m = h * h + l * l,
                p = d * d + u * u,
                g = h * d + l * u,
                f = a * Math.sqrt(m) / c,
                v = a * Math.sqrt(p) / c,
                x = f * g / m,
                y = v * g / p,
                b = f * u + v * l,
                w = f * d + v * h,
                S = l * (v + x),
                A = h * (v + x),
                P = u * (f + y),
                T = d * (f + y),
                C = Math.atan2(A - w, S - b),
                M = Math.atan2(T - w, P - b);
                this.arc(b + t, w + e, a, C, M, l * d > u * h)
            }
            return this.dirty = !0,
            this
        },
        e.Graphics.prototype.arc = function(t, e, i, s, a, r) {
            if (r = r || !1, s === a) return this; ! r && s >= a ? a += 2 * Math.PI: r && a >= s && (s += 2 * Math.PI);
            var n = r ? -1 * (s - a) : a - s,
            o = Math.abs(n) / (2 * Math.PI) * 40;
            if (0 === n) return this;
            var h = t + Math.cos(s) * i,
            l = e + Math.sin(s) * i;
            r && this.filling ? this.moveTo(t, e) : this.moveTo(h, l);
            for (var d = this.currentPath.shape.points,
            u = n / (2 * o), c = 2 * u, m = Math.cos(u), p = Math.sin(u), g = o - 1, f = g % 1 / g, v = 0; g >= v; v++) {
                var x = v + f * v,
                y = u + s + c * x,
                b = Math.cos(y),
                w = -Math.sin(y);
                d.push((m * b + p * w) * i + t, (m * -w + p * b) * i + e)
            }
            return this.dirty = !0,
            this
        },
        e.Graphics.prototype.beginFill = function(t, e) {
            return this.filling = !0,
            this.fillColor = t || 0,
            this.fillAlpha = void 0 === e ? 1 : e,
            this.currentPath && this.currentPath.shape.points.length <= 2 && (this.currentPath.fill = this.filling, this.currentPath.fillColor = this.fillColor, this.currentPath.fillAlpha = this.fillAlpha),
            this
        },
        e.Graphics.prototype.endFill = function() {
            return this.filling = !1,
            this.fillColor = null,
            this.fillAlpha = 1,
            this
        },
        e.Graphics.prototype.drawRect = function(t, i, s, a) {
            return this.drawShape(new e.Rectangle(t, i, s, a)),
            this
        },
        e.Graphics.prototype.drawRoundedRect = function(t, i, s, a, r) {
            return this.drawShape(new e.RoundedRectangle(t, i, s, a, r)),
            this
        },
        e.Graphics.prototype.drawCircle = function(t, i, s) {
            return this.drawShape(new e.Circle(t, i, s)),
            this
        },
        e.Graphics.prototype.drawEllipse = function(t, i, s, a) {
            return this.drawShape(new e.Ellipse(t, i, s, a)),
            this
        },
        e.Graphics.prototype.drawPolygon = function(t) {
            return t instanceof Array || (t = Array.prototype.slice.call(arguments)),
            this.drawShape(new e.Polygon(t)),
            this
        },
        e.Graphics.prototype.clear = function() {
            return this.lineWidth = 0,
            this.filling = !1,
            this.dirty = !0,
            this.clearDirty = !0,
            this.graphicsData = [],
            this
        },
        e.Graphics.prototype.generateTexture = function(t, i) {
            t = t || 1;
            var s = this.getBounds(),
            a = new e.CanvasBuffer(s.width * t, s.height * t),
            r = e.Texture.fromCanvas(a.canvas, i);
            return r.baseTexture.resolution = t,
            a.context.scale(t, t),
            a.context.translate( - s.x, -s.y),
            e.CanvasGraphics.renderGraphics(this, a.context),
            r
        },
        e.Graphics.prototype._renderWebGL = function(t) {
            if (this.visible !== !1 && 0 !== this.alpha && this.isMask !== !0) {
                if (this._cacheAsBitmap) return (this.dirty || this.cachedSpriteDirty) && (this._generateCachedSprite(), this.updateCachedSpriteTexture(), this.cachedSpriteDirty = !1, this.dirty = !1),
                this._cachedSprite.worldAlpha = this.worldAlpha,
                void e.Sprite.prototype._renderWebGL.call(this._cachedSprite, t);
                if (t.spriteBatch.stop(), t.blendModeManager.setBlendMode(this.blendMode), this._mask && t.maskManager.pushMask(this._mask, t), this._filters && t.filterManager.pushFilter(this._filterBlock), this.blendMode !== t.spriteBatch.currentBlendMode) {
                    t.spriteBatch.currentBlendMode = this.blendMode;
                    var i = e.blendModesWebGL[t.spriteBatch.currentBlendMode];
                    t.spriteBatch.gl.blendFunc(i[0], i[1])
                }
                if (this.webGLDirty && (this.dirty = !0, this.webGLDirty = !1), e.WebGLGraphics.renderGraphics(this, t), this.children.length) {
                    t.spriteBatch.start();
                    for (var s = 0,
                    a = this.children.length; a > s; s++) this.children[s]._renderWebGL(t);
                    t.spriteBatch.stop()
                }
                this._filters && t.filterManager.popFilter(),
                this._mask && t.maskManager.popMask(this.mask, t),
                t.drawCount++,
                t.spriteBatch.start()
            }
        },
        e.Graphics.prototype._renderCanvas = function(t) {
            if (this.visible !== !1 && 0 !== this.alpha && this.isMask !== !0) {
                if (this._cacheAsBitmap) return (this.dirty || this.cachedSpriteDirty) && (this._generateCachedSprite(), this.updateCachedSpriteTexture(), this.cachedSpriteDirty = !1, this.dirty = !1),
                this._cachedSprite.alpha = this.alpha,
                void e.Sprite.prototype._renderCanvas.call(this._cachedSprite, t);
                var i = t.context,
                s = this.worldTransform;
                this.blendMode !== t.currentBlendMode && (t.currentBlendMode = this.blendMode, i.globalCompositeOperation = e.blendModesCanvas[t.currentBlendMode]),
                this._mask && t.maskManager.pushMask(this._mask, t);
                var a = t.resolution;
                i.setTransform(s.a * a, s.b * a, s.c * a, s.d * a, s.tx * a, s.ty * a),
                e.CanvasGraphics.renderGraphics(this, i);
                for (var r = 0,
                n = this.children.length; n > r; r++) this.children[r]._renderCanvas(t);
                this._mask && t.maskManager.popMask(t)
            }
        },
        e.Graphics.prototype.getBounds = function(t) {
            if (this.isMask) return e.EmptyRectangle;
            this.dirty && (this.updateLocalBounds(), this.webGLDirty = !0, this.cachedSpriteDirty = !0, this.dirty = !1);
            var i = this._localBounds,
            s = i.x,
            a = i.width + i.x,
            r = i.y,
            n = i.height + i.y,
            o = t || this.worldTransform,
            h = o.a,
            l = o.b,
            d = o.c,
            u = o.d,
            c = o.tx,
            m = o.ty,
            p = h * a + d * n + c,
            g = u * n + l * a + m,
            f = h * s + d * n + c,
            v = u * n + l * s + m,
            x = h * s + d * r + c,
            y = u * r + l * s + m,
            b = h * a + d * r + c,
            w = u * r + l * a + m,
            S = p,
            A = g,
            P = p,
            T = g;
            return P = P > f ? f: P,
            P = P > x ? x: P,
            P = P > b ? b: P,
            T = T > v ? v: T,
            T = T > y ? y: T,
            T = T > w ? w: T,
            S = f > S ? f: S,
            S = x > S ? x: S,
            S = b > S ? b: S,
            A = v > A ? v: A,
            A = y > A ? y: A,
            A = w > A ? w: A,
            this._bounds.x = P,
            this._bounds.width = S - P,
            this._bounds.y = T,
            this._bounds.height = A - T,
            this._bounds
        },
        e.Graphics.prototype.updateLocalBounds = function() {
            var t = 1 / 0,
            i = -(1 / 0),
            s = 1 / 0,
            a = -(1 / 0);
            if (this.graphicsData.length) for (var r, n, o, h, l, d, u = 0; u < this.graphicsData.length; u++) {
                var c = this.graphicsData[u],
                m = c.type,
                p = c.lineWidth;
                if (r = c.shape, m === e.Graphics.RECT || m === e.Graphics.RREC) o = r.x - p / 2,
                h = r.y - p / 2,
                l = r.width + p,
                d = r.height + p,
                t = t > o ? o: t,
                i = o + l > i ? o + l: i,
                s = s > h ? h: s,
                a = h + d > a ? h + d: a;
                else if (m === e.Graphics.CIRC) o = r.x,
                h = r.y,
                l = r.radius + p / 2,
                d = r.radius + p / 2,
                t = t > o - l ? o - l: t,
                i = o + l > i ? o + l: i,
                s = s > h - d ? h - d: s,
                a = h + d > a ? h + d: a;
                else if (m === e.Graphics.ELIP) o = r.x,
                h = r.y,
                l = r.width + p / 2,
                d = r.height + p / 2,
                t = t > o - l ? o - l: t,
                i = o + l > i ? o + l: i,
                s = s > h - d ? h - d: s,
                a = h + d > a ? h + d: a;
                else {
                    n = r.points;
                    for (var g = 0; g < n.length; g += 2) o = n[g],
                    h = n[g + 1],
                    t = t > o - p ? o - p: t,
                    i = o + p > i ? o + p: i,
                    s = s > h - p ? h - p: s,
                    a = h + p > a ? h + p: a
                }
            } else t = 0,
            i = 0,
            s = 0,
            a = 0;
            var f = this.boundsPadding;
            this._localBounds.x = t - f,
            this._localBounds.width = i - t + 2 * f,
            this._localBounds.y = s - f,
            this._localBounds.height = a - s + 2 * f
        },
        e.Graphics.prototype._generateCachedSprite = function() {
            var t = this.getLocalBounds();
            if (this._cachedSprite) this._cachedSprite.buffer.resize(t.width, t.height);
            else {
                var i = new e.CanvasBuffer(t.width, t.height),
                s = e.Texture.fromCanvas(i.canvas);
                this._cachedSprite = new e.Sprite(s),
                this._cachedSprite.buffer = i,
                this._cachedSprite.worldTransform = this.worldTransform
            }
            this._cachedSprite.anchor.x = -(t.x / t.width),
            this._cachedSprite.anchor.y = -(t.y / t.height),
            this._cachedSprite.buffer.context.translate( - t.x, -t.y),
            this.worldAlpha = 1,
            e.CanvasGraphics.renderGraphics(this, this._cachedSprite.buffer.context),
            this._cachedSprite.alpha = this.alpha
        },
        e.Graphics.prototype.updateCachedSpriteTexture = function() {
            var t = this._cachedSprite,
            e = t.texture,
            i = t.buffer.canvas;
            e.baseTexture.width = i.width,
            e.baseTexture.height = i.height,
            e.crop.width = e.frame.width = i.width,
            e.crop.height = e.frame.height = i.height,
            t._width = i.width,
            t._height = i.height,
            e.baseTexture.dirty()
        },
        e.Graphics.prototype.destroyCachedSprite = function() {
            this._cachedSprite.texture.destroy(!0),
            this._cachedSprite = null
        },
        e.Graphics.prototype.drawShape = function(t) {
            this.currentPath && this.currentPath.shape.points.length <= 2 && this.graphicsData.pop(),
            this.currentPath = null;
            var i = new e.GraphicsData(this.lineWidth, this.lineColor, this.lineAlpha, this.fillColor, this.fillAlpha, this.filling, t);
            return this.graphicsData.push(i),
            i.type === e.Graphics.POLY && (i.shape.closed = this.filling, this.currentPath = i),
            this.dirty = !0,
            i
        },
        e.GraphicsData = function(t, e, i, s, a, r, n) {
            this.lineWidth = t,
            this.lineColor = e,
            this.lineAlpha = i,
            this._lineTint = e,
            this.fillColor = s,
            this.fillAlpha = a,
            this._fillTint = s,
            this.fill = r,
            this.shape = n,
            this.type = n.type
        },
        e.Graphics.POLY = 0,
        e.Graphics.RECT = 1,
        e.Graphics.CIRC = 2,
        e.Graphics.ELIP = 3,
        e.Graphics.RREC = 4,
        e.Polygon.prototype.type = e.Graphics.POLY,
        e.Rectangle.prototype.type = e.Graphics.RECT,
        e.Circle.prototype.type = e.Graphics.CIRC,
        e.Ellipse.prototype.type = e.Graphics.ELIP,
        e.RoundedRectangle.prototype.type = e.Graphics.RREC,
        e.Strip = function(t) {
            e.DisplayObjectContainer.call(this),
            this.texture = t,
            this.uvs = new e.Float32Array([0, 1, 1, 1, 1, 0, 0, 1]),
            this.vertices = new e.Float32Array([0, 0, 100, 0, 100, 100, 0, 100]),
            this.colors = new e.Float32Array([1, 1, 1, 1]),
            this.indices = new e.Uint16Array([0, 1, 2, 3]),
            this.dirty = !0,
            this.blendMode = e.blendModes.NORMAL,
            this.canvasPadding = 0,
            this.drawMode = e.Strip.DrawModes.TRIANGLE_STRIP
        },
        e.Strip.prototype = Object.create(e.DisplayObjectContainer.prototype),
        e.Strip.prototype.constructor = e.Strip,
        e.Strip.prototype._renderWebGL = function(t) { ! this.visible || this.alpha <= 0 || (t.spriteBatch.stop(), this._vertexBuffer || this._initWebGL(t), t.shaderManager.setShader(t.shaderManager.stripShader), this._renderStrip(t), t.spriteBatch.start())
        },
        e.Strip.prototype._initWebGL = function(t) {
            var e = t.gl;
            this._vertexBuffer = e.createBuffer(),
            this._indexBuffer = e.createBuffer(),
            this._uvBuffer = e.createBuffer(),
            this._colorBuffer = e.createBuffer(),
            e.bindBuffer(e.ARRAY_BUFFER, this._vertexBuffer),
            e.bufferData(e.ARRAY_BUFFER, this.vertices, e.DYNAMIC_DRAW),
            e.bindBuffer(e.ARRAY_BUFFER, this._uvBuffer),
            e.bufferData(e.ARRAY_BUFFER, this.uvs, e.STATIC_DRAW),
            e.bindBuffer(e.ARRAY_BUFFER, this._colorBuffer),
            e.bufferData(e.ARRAY_BUFFER, this.colors, e.STATIC_DRAW),
            e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, this._indexBuffer),
            e.bufferData(e.ELEMENT_ARRAY_BUFFER, this.indices, e.STATIC_DRAW)
        },
        e.Strip.prototype._renderStrip = function(t) {
            var i = t.gl,
            s = t.projection,
            a = t.offset,
            r = t.shaderManager.stripShader,
            n = this.drawMode === e.Strip.DrawModes.TRIANGLE_STRIP ? i.TRIANGLE_STRIP: i.TRIANGLES;
            t.blendModeManager.setBlendMode(this.blendMode),
            i.uniformMatrix3fv(r.translationMatrix, !1, this.worldTransform.toArray(!0)),
            i.uniform2f(r.projectionVector, s.x, -s.y),
            i.uniform2f(r.offsetVector, -a.x, -a.y),
            i.uniform1f(r.alpha, this.worldAlpha),
            this.dirty ? (this.dirty = !1, i.bindBuffer(i.ARRAY_BUFFER, this._vertexBuffer), i.bufferData(i.ARRAY_BUFFER, this.vertices, i.STATIC_DRAW), i.vertexAttribPointer(r.aVertexPosition, 2, i.FLOAT, !1, 0, 0), i.bindBuffer(i.ARRAY_BUFFER, this._uvBuffer), i.bufferData(i.ARRAY_BUFFER, this.uvs, i.STATIC_DRAW), i.vertexAttribPointer(r.aTextureCoord, 2, i.FLOAT, !1, 0, 0), i.activeTexture(i.TEXTURE0), this.texture.baseTexture._dirty[i.id] ? t.renderer.updateTexture(this.texture.baseTexture) : i.bindTexture(i.TEXTURE_2D, this.texture.baseTexture._glTextures[i.id]), i.bindBuffer(i.ELEMENT_ARRAY_BUFFER, this._indexBuffer), i.bufferData(i.ELEMENT_ARRAY_BUFFER, this.indices, i.STATIC_DRAW)) : (i.bindBuffer(i.ARRAY_BUFFER, this._vertexBuffer), i.bufferSubData(i.ARRAY_BUFFER, 0, this.vertices), i.vertexAttribPointer(r.aVertexPosition, 2, i.FLOAT, !1, 0, 0), i.bindBuffer(i.ARRAY_BUFFER, this._uvBuffer), i.vertexAttribPointer(r.aTextureCoord, 2, i.FLOAT, !1, 0, 0), i.activeTexture(i.TEXTURE0), this.texture.baseTexture._dirty[i.id] ? t.renderer.updateTexture(this.texture.baseTexture) : i.bindTexture(i.TEXTURE_2D, this.texture.baseTexture._glTextures[i.id]), i.bindBuffer(i.ELEMENT_ARRAY_BUFFER, this._indexBuffer)),
            i.drawElements(n, this.indices.length, i.UNSIGNED_SHORT, 0)
        },
        e.Strip.prototype._renderCanvas = function(t) {
            var i = t.context,
            s = this.worldTransform;
            t.roundPixels ? i.setTransform(s.a, s.b, s.c, s.d, 0 | s.tx, 0 | s.ty) : i.setTransform(s.a, s.b, s.c, s.d, s.tx, s.ty),
            this.drawMode === e.Strip.DrawModes.TRIANGLE_STRIP ? this._renderCanvasTriangleStrip(i) : this._renderCanvasTriangles(i)
        },
        e.Strip.prototype._renderCanvasTriangleStrip = function(t) {
            var e = this.vertices,
            i = this.uvs,
            s = e.length / 2;
            this.count++;
            for (var a = 0; s - 2 > a; a++) {
                var r = 2 * a;
                this._renderCanvasDrawTriangle(t, e, i, r, r + 2, r + 4)
            }
        },
        e.Strip.prototype._renderCanvasTriangles = function(t) {
            var e = this.vertices,
            i = this.uvs,
            s = this.indices,
            a = s.length;
            this.count++;
            for (var r = 0; a > r; r += 3) {
                var n = 2 * s[r],
                o = 2 * s[r + 1],
                h = 2 * s[r + 2];
                this._renderCanvasDrawTriangle(t, e, i, n, o, h)
            }
        },
        e.Strip.prototype._renderCanvasDrawTriangle = function(t, e, i, s, a, r) {
            var n = this.texture.baseTexture.source,
            o = this.texture.width,
            h = this.texture.height,
            l = e[s],
            d = e[a],
            u = e[r],
            c = e[s + 1],
            m = e[a + 1],
            p = e[r + 1],
            g = i[s] * o,
            f = i[a] * o,
            v = i[r] * o,
            x = i[s + 1] * h,
            y = i[a + 1] * h,
            b = i[r + 1] * h;
            if (this.canvasPadding > 0) {
                var w = this.canvasPadding / this.worldTransform.a,
                S = this.canvasPadding / this.worldTransform.d,
                A = (l + d + u) / 3,
                P = (c + m + p) / 3,
                T = l - A,
                C = c - P,
                M = Math.sqrt(T * T + C * C);
                l = A + T / M * (M + w),
                c = P + C / M * (M + S),
                T = d - A,
                C = m - P,
                M = Math.sqrt(T * T + C * C),
                d = A + T / M * (M + w),
                m = P + C / M * (M + S),
                T = u - A,
                C = p - P,
                M = Math.sqrt(T * T + C * C),
                u = A + T / M * (M + w),
                p = P + C / M * (M + S)
            }
            t.save(),
            t.beginPath(),
            t.moveTo(l, c),
            t.lineTo(d, m),
            t.lineTo(u, p),
            t.closePath(),
            t.clip();
            var G = g * y + x * v + f * b - y * v - x * f - g * b,
            E = l * y + x * u + d * b - y * u - x * d - l * b,
            j = g * d + l * v + f * u - d * v - l * f - g * u,
            I = g * y * u + x * d * v + l * f * b - l * y * v - x * f * u - g * d * b,
            R = c * y + x * p + m * b - y * p - x * m - c * b,
            _ = g * m + c * v + f * p - m * v - c * f - g * p,
            L = g * y * p + x * m * v + c * f * b - c * y * v - x * f * p - g * m * b;
            t.transform(E / G, R / G, j / G, _ / G, I / G, L / G),
            t.drawImage(n, 0, 0),
            t.restore()
        },
        e.Strip.prototype.renderStripFlat = function(t) {
            var e = this.context,
            i = t.vertices,
            s = i.length / 2;
            this.count++,
            e.beginPath();
            for (var a = 1; s - 2 > a; a++) {
                var r = 2 * a,
                n = i[r],
                o = i[r + 2],
                h = i[r + 4],
                l = i[r + 1],
                d = i[r + 3],
                u = i[r + 5];
                e.moveTo(n, l),
                e.lineTo(o, d),
                e.lineTo(h, u)
            }
            e.fillStyle = "#FF0000",
            e.fill(),
            e.closePath()
        },
        e.Strip.prototype.onTextureUpdate = function() {
            this.updateFrame = !0
        },
        e.Strip.prototype.getBounds = function(t) {
            for (var i = t || this.worldTransform,
            s = i.a,
            a = i.b,
            r = i.c,
            n = i.d,
            o = i.tx,
            h = i.ty,
            l = -(1 / 0), d = -(1 / 0), u = 1 / 0, c = 1 / 0, m = this.vertices, p = 0, g = m.length; g > p; p += 2) {
                var f = m[p],
                v = m[p + 1],
                x = s * f + r * v + o,
                y = n * v + a * f + h;
                u = u > x ? x: u,
                c = c > y ? y: c,
                l = x > l ? x: l,
                d = y > d ? y: d
            }
            if (u === -(1 / 0) || d === 1 / 0) return e.EmptyRectangle;
            var b = this._bounds;
            return b.x = u,
            b.width = l - u,
            b.y = c,
            b.height = d - c,
            this._currentBounds = b,
            b
        },
        e.Strip.DrawModes = {
            TRIANGLE_STRIP: 0,
            TRIANGLES: 1
        },
        e.Rope = function(t, i) {
            e.Strip.call(this, t),
            this.points = i,
            this.vertices = new e.Float32Array(4 * i.length),
            this.uvs = new e.Float32Array(4 * i.length),
            this.colors = new e.Float32Array(2 * i.length),
            this.indices = new e.Uint16Array(2 * i.length),
            this.refresh()
        },
        e.Rope.prototype = Object.create(e.Strip.prototype),
        e.Rope.prototype.constructor = e.Rope,
        e.Rope.prototype.refresh = function() {
            var t = this.points;
            if (! (t.length < 1)) {
                var e = this.uvs,
                i = t[0],
                s = this.indices,
                a = this.colors;
                this.count -= .2,
                e[0] = 0,
                e[1] = 0,
                e[2] = 0,
                e[3] = 1,
                a[0] = 1,
                a[1] = 1,
                s[0] = 0,
                s[1] = 1;
                for (var r, n, o, h = t.length,
                l = 1; h > l; l++) r = t[l],
                n = 4 * l,
                o = l / (h - 1),
                l % 2 ? (e[n] = o, e[n + 1] = 0, e[n + 2] = o, e[n + 3] = 1) : (e[n] = o, e[n + 1] = 0, e[n + 2] = o, e[n + 3] = 1),
                n = 2 * l,
                a[n] = 1,
                a[n + 1] = 1,
                n = 2 * l,
                s[n] = n,
                s[n + 1] = n + 1,
                i = r
            }
        },
        e.Rope.prototype.updateTransform = function() {
            var t = this.points;
            if (! (t.length < 1)) {
                var i, s = t[0],
                a = {
                    x: 0,
                    y: 0
                };
                this.count -= .2;
                for (var r, n, o, h, l, d = this.vertices,
                u = t.length,
                c = 0; u > c; c++) r = t[c],
                n = 4 * c,
                i = c < t.length - 1 ? t[c + 1] : r,
                a.y = -(i.x - s.x),
                a.x = i.y - s.y,
                o = 10 * (1 - c / (u - 1)),
                o > 1 && (o = 1),
                h = Math.sqrt(a.x * a.x + a.y * a.y),
                l = this.texture.height / 2,
                a.x /= h,
                a.y /= h,
                a.x *= l,
                a.y *= l,
                d[n] = r.x + a.x,
                d[n + 1] = r.y + a.y,
                d[n + 2] = r.x - a.x,
                d[n + 3] = r.y - a.y,
                s = r;
                e.DisplayObjectContainer.prototype.updateTransform.call(this)
            }
        },
        e.Rope.prototype.setTexture = function(t) {
            this.texture = t
        },
        e.TilingSprite = function(t, i, s) {
            e.Sprite.call(this, t),
            this._width = i || 100,
            this._height = s || 100,
            this.tileScale = new e.Point(1, 1),
            this.tileScaleOffset = new e.Point(1, 1),
            this.tilePosition = new e.Point(0, 0),
            this.renderable = !0,
            this.tint = 16777215,
            this.blendMode = e.blendModes.NORMAL
        },
        e.TilingSprite.prototype = Object.create(e.Sprite.prototype),
        e.TilingSprite.prototype.constructor = e.TilingSprite,
        Object.defineProperty(e.TilingSprite.prototype, "width", {
            get: function() {
                return this._width
            },
            set: function(t) {
                this._width = t
            }
        }),
        Object.defineProperty(e.TilingSprite.prototype, "height", {
            get: function() {
                return this._height
            },
            set: function(t) {
                this._height = t
            }
        }),
        e.TilingSprite.prototype.setTexture = function(t) {
            this.texture !== t && (this.texture = t, this.refreshTexture = !0, this.cachedTint = 16777215)
        },
        e.TilingSprite.prototype._renderWebGL = function(t) {
            if (this.visible !== !1 && 0 !== this.alpha) {
                var e, i;
                for (this._mask && (t.spriteBatch.stop(), t.maskManager.pushMask(this.mask, t), t.spriteBatch.start()), this._filters && (t.spriteBatch.flush(), t.filterManager.pushFilter(this._filterBlock)), !this.tilingTexture || this.refreshTexture ? (this.generateTilingTexture(!0), this.tilingTexture && this.tilingTexture.needsUpdate && (t.renderer.updateTexture(this.tilingTexture.baseTexture), this.tilingTexture.needsUpdate = !1)) : t.spriteBatch.renderTilingSprite(this), e = 0, i = this.children.length; i > e; e++) this.children[e]._renderWebGL(t);
                t.spriteBatch.stop(),
                this._filters && t.filterManager.popFilter(),
                this._mask && t.maskManager.popMask(this._mask, t),
                t.spriteBatch.start()
            }
        },
        e.TilingSprite.prototype._renderCanvas = function(t) {
            if (this.visible !== !1 && 0 !== this.alpha) {
                var i = t.context;
                this._mask && t.maskManager.pushMask(this._mask, t),
                i.globalAlpha = this.worldAlpha;
                var s, a, r = this.worldTransform,
                n = t.resolution;
                if (i.setTransform(r.a * n, r.b * n, r.c * n, r.d * n, r.tx * n, r.ty * n), !this.__tilePattern || this.refreshTexture) {
                    if (this.generateTilingTexture(!1), !this.tilingTexture) return;
                    this.__tilePattern = i.createPattern(this.tilingTexture.baseTexture.source, "repeat")
                }
                this.blendMode !== t.currentBlendMode && (t.currentBlendMode = this.blendMode, i.globalCompositeOperation = e.blendModesCanvas[t.currentBlendMode]);
                var o = this.tilePosition,
                h = this.tileScale;
                for (o.x %= this.tilingTexture.baseTexture.width, o.y %= this.tilingTexture.baseTexture.height, i.scale(h.x, h.y), i.translate(o.x + this.anchor.x * -this._width, o.y + this.anchor.y * -this._height), i.fillStyle = this.__tilePattern, i.fillRect( - o.x, -o.y, this._width / h.x, this._height / h.y), i.scale(1 / h.x, 1 / h.y), i.translate( - o.x + this.anchor.x * this._width, -o.y + this.anchor.y * this._height), this._mask && t.maskManager.popMask(t), s = 0, a = this.children.length; a > s; s++) this.children[s]._renderCanvas(t)
            }
        },
        e.TilingSprite.prototype.getBounds = function() {
            var t = this._width,
            e = this._height,
            i = t * (1 - this.anchor.x),
            s = t * -this.anchor.x,
            a = e * (1 - this.anchor.y),
            r = e * -this.anchor.y,
            n = this.worldTransform,
            o = n.a,
            h = n.b,
            l = n.c,
            d = n.d,
            u = n.tx,
            c = n.ty,
            m = o * s + l * r + u,
            p = d * r + h * s + c,
            g = o * i + l * r + u,
            f = d * r + h * i + c,
            v = o * i + l * a + u,
            x = d * a + h * i + c,
            y = o * s + l * a + u,
            b = d * a + h * s + c,
            w = -(1 / 0),
            S = -(1 / 0),
            A = 1 / 0,
            P = 1 / 0;
            A = A > m ? m: A,
            A = A > g ? g: A,
            A = A > v ? v: A,
            A = A > y ? y: A,
            P = P > p ? p: P,
            P = P > f ? f: P,
            P = P > x ? x: P,
            P = P > b ? b: P,
            w = m > w ? m: w,
            w = g > w ? g: w,
            w = v > w ? v: w,
            w = y > w ? y: w,
            S = p > S ? p: S,
            S = f > S ? f: S,
            S = x > S ? x: S,
            S = b > S ? b: S;
            var T = this._bounds;
            return T.x = A,
            T.width = w - A,
            T.y = P,
            T.height = S - P,
            this._currentBounds = T,
            T
        },
        e.TilingSprite.prototype.onTextureUpdate = function() {},
        e.TilingSprite.prototype.generateTilingTexture = function(t) {
            if (this.texture.baseTexture.hasLoaded) {
                var i, s, a = this.originalTexture || this.texture,
                r = a.frame,
                n = r.width !== a.baseTexture.width || r.height !== a.baseTexture.height,
                o = !1;
                if (t ? (i = e.getNextPowerOfTwo(r.width), s = e.getNextPowerOfTwo(r.height), (r.width !== i || r.height !== s || a.baseTexture.width !== i || a.baseTexture.height || s) && (o = !0)) : n && (a.trim ? (i = a.trim.width, s = a.trim.height) : (i = r.width, s = r.height), o = !0), o) {
                    var h;
                    this.tilingTexture && this.tilingTexture.isTiling ? (h = this.tilingTexture.canvasBuffer, h.resize(i, s), this.tilingTexture.baseTexture.width = i, this.tilingTexture.baseTexture.height = s, this.tilingTexture.needsUpdate = !0) : (h = new e.CanvasBuffer(i, s), this.tilingTexture = e.Texture.fromCanvas(h.canvas), this.tilingTexture.canvasBuffer = h, this.tilingTexture.isTiling = !0),
                    h.context.drawImage(a.baseTexture.source, a.crop.x, a.crop.y, a.crop.width, a.crop.height, 0, 0, i, s),
                    this.tileScaleOffset.x = r.width / i,
                    this.tileScaleOffset.y = r.height / s
                } else this.tilingTexture && this.tilingTexture.isTiling && this.tilingTexture.destroy(!0),
                this.tileScaleOffset.x = 1,
                this.tileScaleOffset.y = 1,
                this.tilingTexture = a;
                this.refreshTexture = !1,
                this.originalTexture = this.texture,
                this.texture = this.tilingTexture,
                this.tilingTexture.baseTexture._powerOf2 = !0
            }
        },
        e.TilingSprite.prototype.destroy = function() {
            e.Sprite.prototype.destroy.call(this),
            this.tileScale = null,
            this.tileScaleOffset = null,
            this.tilePosition = null,
            this.tilingTexture && (this.tilingTexture.destroy(!0), this.tilingTexture = null)
        };
        var i = {
            radDeg: 180 / Math.PI,
            degRad: Math.PI / 180,
            temp: [],
            Float32Array: "undefined" == typeof Float32Array ? Array: Float32Array,
            Uint16Array: "undefined" == typeof Uint16Array ? Array: Uint16Array
        };
        i.BoneData = function(t, e) {
            this.name = t,
            this.parent = e
        },
        i.BoneData.prototype = {
            length: 0,
            x: 0,
            y: 0,
            rotation: 0,
            scaleX: 1,
            scaleY: 1,
            inheritScale: !0,
            inheritRotation: !0,
            flipX: !1,
            flipY: !1
        },
        i.SlotData = function(t, e) {
            this.name = t,
            this.boneData = e
        },
        i.SlotData.prototype = {
            r: 1,
            g: 1,
            b: 1,
            a: 1,
            attachmentName: null,
            additiveBlending: !1
        },
        i.IkConstraintData = function(t) {
            this.name = t,
            this.bones = []
        },
        i.IkConstraintData.prototype = {
            target: null,
            bendDirection: 1,
            mix: 1
        },
        i.Bone = function(t, e, i) {
            this.data = t,
            this.skeleton = e,
            this.parent = i,
            this.setToSetupPose()
        },
        i.Bone.yDown = !1,
        i.Bone.prototype = {
            x: 0,
            y: 0,
            rotation: 0,
            rotationIK: 0,
            scaleX: 1,
            scaleY: 1,
            flipX: !1,
            flipY: !1,
            m00: 0,
            m01: 0,
            worldX: 0,
            m10: 0,
            m11: 0,
            worldY: 0,
            worldRotation: 0,
            worldScaleX: 1,
            worldScaleY: 1,
            worldFlipX: !1,
            worldFlipY: !1,
            updateWorldTransform: function() {
                var t = this.parent;
                if (t) this.worldX = this.x * t.m00 + this.y * t.m01 + t.worldX,
                this.worldY = this.x * t.m10 + this.y * t.m11 + t.worldY,
                this.data.inheritScale ? (this.worldScaleX = t.worldScaleX * this.scaleX, this.worldScaleY = t.worldScaleY * this.scaleY) : (this.worldScaleX = this.scaleX, this.worldScaleY = this.scaleY),
                this.worldRotation = this.data.inheritRotation ? t.worldRotation + this.rotationIK: this.rotationIK,
                this.worldFlipX = t.worldFlipX != this.flipX,
                this.worldFlipY = t.worldFlipY != this.flipY;
                else {
                    var e = this.skeleton.flipX,
                    s = this.skeleton.flipY;
                    this.worldX = e ? -this.x: this.x,
                    this.worldY = s != i.Bone.yDown ? -this.y: this.y,
                    this.worldScaleX = this.scaleX,
                    this.worldScaleY = this.scaleY,
                    this.worldRotation = this.rotationIK,
                    this.worldFlipX = e != this.flipX,
                    this.worldFlipY = s != this.flipY
                }
                var a = this.worldRotation * i.degRad,
                r = Math.cos(a),
                n = Math.sin(a);
                this.worldFlipX ? (this.m00 = -r * this.worldScaleX, this.m01 = n * this.worldScaleY) : (this.m00 = r * this.worldScaleX, this.m01 = -n * this.worldScaleY),
                this.worldFlipY != i.Bone.yDown ? (this.m10 = -n * this.worldScaleX, this.m11 = -r * this.worldScaleY) : (this.m10 = n * this.worldScaleX, this.m11 = r * this.worldScaleY)
            },
            setToSetupPose: function() {
                var t = this.data;
                this.x = t.x,
                this.y = t.y,
                this.rotation = t.rotation,
                this.rotationIK = this.rotation,
                this.scaleX = t.scaleX,
                this.scaleY = t.scaleY,
                this.flipX = t.flipX,
                this.flipY = t.flipY
            },
            worldToLocal: function(t) {
                var e = t[0] - this.worldX,
                s = t[1] - this.worldY,
                a = this.m00,
                r = this.m10,
                n = this.m01,
                o = this.m11;
                this.worldFlipX != (this.worldFlipY != i.Bone.yDown) && (a = -a, o = -o);
                var h = 1 / (a * o - n * r);
                t[0] = e * a * h - s * n * h,
                t[1] = s * o * h - e * r * h
            },
            localToWorld: function(t) {
                var e = t[0],
                i = t[1];
                t[0] = e * this.m00 + i * this.m01 + this.worldX,
                t[1] = e * this.m10 + i * this.m11 + this.worldY
            }
        },
        i.Slot = function(t, e) {
            this.data = t,
            this.bone = e,
            this.setToSetupPose()
        },
        i.Slot.prototype = {
            r: 1,
            g: 1,
            b: 1,
            a: 1,
            _attachmentTime: 0,
            attachment: null,
            attachmentVertices: [],
            setAttachment: function(t) {
                this.attachment = t,
                this._attachmentTime = this.bone.skeleton.time,
                this.attachmentVertices.length = 0
            },
            setAttachmentTime: function(t) {
                this._attachmentTime = this.bone.skeleton.time - t
            },
            getAttachmentTime: function() {
                return this.bone.skeleton.time - this._attachmentTime
            },
            setToSetupPose: function() {
                var t = this.data;
                this.r = t.r,
                this.g = t.g,
                this.b = t.b,
                this.a = t.a;
                for (var e = this.bone.skeleton.data.slots,
                i = 0,
                s = e.length; s > i; i++) if (e[i] == t) {
                    this.setAttachment(t.attachmentName ? this.bone.skeleton.getAttachmentBySlotIndex(i, t.attachmentName) : null);
                    break
                }
            }
        },
        i.IkConstraint = function(t, e) {
            this.data = t,
            this.mix = t.mix,
            this.bendDirection = t.bendDirection,
            this.bones = [];
            for (var i = 0,
            s = t.bones.length; s > i; i++) this.bones.push(e.findBone(t.bones[i].name));
            this.target = e.findBone(t.target.name)
        },
        i.IkConstraint.prototype = {
            apply: function() {
                var t = this.target,
                e = this.bones;
                switch (e.length) {
                case 1:
                    i.IkConstraint.apply1(e[0], t.worldX, t.worldY, this.mix);
                    break;
                case 2:
                    i.IkConstraint.apply2(e[0], e[1], t.worldX, t.worldY, this.bendDirection, this.mix)
                }
            }
        },
        i.IkConstraint.apply1 = function(t, e, s, a) {
            var r = t.data.inheritRotation && t.parent ? t.parent.worldRotation: 0,
            n = t.rotation,
            o = Math.atan2(s - t.worldY, e - t.worldX) * i.radDeg - r;
            t.rotationIK = n + (o - n) * a
        },
        i.IkConstraint.apply2 = function(t, e, s, a, r, n) {
            var o = e.rotation,
            h = t.rotation;
            if (!n) return e.rotationIK = o,
            void(t.rotationIK = h);
            var l, d, u = i.temp,
            c = t.parent;
            c ? (u[0] = s, u[1] = a, c.worldToLocal(u), s = (u[0] - t.x) * c.worldScaleX, a = (u[1] - t.y) * c.worldScaleY) : (s -= t.x, a -= t.y),
            e.parent == t ? (l = e.x, d = e.y) : (u[0] = e.x, u[1] = e.y, e.parent.localToWorld(u), t.worldToLocal(u), l = u[0], d = u[1]);
            var m = l * t.worldScaleX,
            p = d * t.worldScaleY,
            g = Math.atan2(p, m),
            f = Math.sqrt(m * m + p * p),
            v = e.data.length * e.worldScaleX,
            x = 2 * f * v;
            if (1e-4 > x) return void(e.rotationIK = o + (Math.atan2(a, s) * i.radDeg - h - o) * n);
            var y = (s * s + a * a - f * f - v * v) / x; - 1 > y ? y = -1 : y > 1 && (y = 1);
            var b = Math.acos(y) * r,
            w = f + v * y,
            S = v * Math.sin(b),
            A = Math.atan2(a * w - s * S, s * w + a * S),
            P = (A - g) * i.radDeg - h;
            P > 180 ? P -= 360 : -180 > P && (P += 360),
            t.rotationIK = h + P * n,
            P = (b + g) * i.radDeg - o,
            P > 180 ? P -= 360 : -180 > P && (P += 360),
            e.rotationIK = o + (P + t.worldRotation - e.parent.worldRotation) * n
        },
        i.Skin = function(t) {
            this.name = t,
            this.attachments = {}
        },
        i.Skin.prototype = {
            addAttachment: function(t, e, i) {
                this.attachments[t + ":" + e] = i
            },
            getAttachment: function(t, e) {
                return this.attachments[t + ":" + e]
            },
            _attachAll: function(t, e) {
                for (var i in e.attachments) {
                    var s = i.indexOf(":"),
                    a = parseInt(i.substring(0, s)),
                    r = i.substring(s + 1),
                    n = t.slots[a];
                    if (n.attachment && n.attachment.name == r) {
                        var o = this.getAttachment(a, r);
                        o && n.setAttachment(o)
                    }
                }
            }
        },
        i.Animation = function(t, e, i) {
            this.name = t,
            this.timelines = e,
            this.duration = i
        },
        i.Animation.prototype = {
            apply: function(t, e, i, s, a) {
                s && 0 != this.duration && (i %= this.duration, e %= this.duration);
                for (var r = this.timelines,
                n = 0,
                o = r.length; o > n; n++) r[n].apply(t, e, i, a, 1)
            },
            mix: function(t, e, i, s, a, r) {
                s && 0 != this.duration && (i %= this.duration, e %= this.duration);
                for (var n = this.timelines,
                o = 0,
                h = n.length; h > o; o++) n[o].apply(t, e, i, a, r)
            }
        },
        i.Animation.binarySearch = function(t, e, i) {
            var s = 0,
            a = Math.floor(t.length / i) - 2;
            if (!a) return i;
            for (var r = a >>> 1;;) {
                if (t[(r + 1) * i] <= e ? s = r + 1 : a = r, s == a) return (s + 1) * i;
                r = s + a >>> 1
            }
        },
        i.Animation.binarySearch1 = function(t, e) {
            var i = 0,
            s = t.length - 2;
            if (!s) return 1;
            for (var a = s >>> 1;;) {
                if (t[a + 1] <= e ? i = a + 1 : s = a, i == s) return i + 1;
                a = i + s >>> 1
            }
        },
        i.Animation.linearSearch = function(t, e, i) {
            for (var s = 0,
            a = t.length - i; a >= s; s += i) if (t[s] > e) return s;
            return - 1
        },
        i.Curves = function(t) {
            this.curves = []
        },
        i.Curves.prototype = {
            setLinear: function(t) {
                this.curves[19 * t] = 0
            },
            setStepped: function(t) {
                this.curves[19 * t] = 1
            },
            setCurve: function(t, e, i, s, a) {
                var r = .1,
                n = r * r,
                o = n * r,
                h = 3 * r,
                l = 3 * n,
                d = 6 * n,
                u = 6 * o,
                c = 2 * -e + s,
                m = 2 * -i + a,
                p = 3 * (e - s) + 1,
                g = 3 * (i - a) + 1,
                f = e * h + c * l + p * o,
                v = i * h + m * l + g * o,
                x = c * d + p * u,
                y = m * d + g * u,
                b = p * u,
                w = g * u,
                S = 19 * t,
                A = this.curves;
                A[S++] = 2;
                for (var P = f,
                T = v,
                C = S + 19 - 1; C > S; S += 2) A[S] = P,
                A[S + 1] = T,
                f += x,
                v += y,
                x += b,
                y += w,
                P += f,
                T += v
            },
            getCurvePercent: function(t, e) {
                e = 0 > e ? 0 : e > 1 ? 1 : e;
                var i = this.curves,
                s = 19 * t,
                a = i[s];
                if (0 === a) return e;
                if (1 == a) return 0;
                s++;
                for (var r = 0,
                n = s,
                o = s + 19 - 1; o > s; s += 2) if (r = i[s], r >= e) {
                    var h, l;
                    return s == n ? (h = 0, l = 0) : (h = i[s - 2], l = i[s - 1]),
                    l + (i[s + 1] - l) * (e - h) / (r - h)
                }
                var d = i[s - 1];
                return d + (1 - d) * (e - r) / (1 - r)
            }
        },
        i.RotateTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = 2 * t
        },
        i.RotateTimeline.prototype = {
            boneIndex: 0,
            getFrameCount: function() {
                return this.frames.length / 2
            },
            setFrame: function(t, e, i) {
                t *= 2,
                this.frames[t] = e,
                this.frames[t + 1] = i
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (! (s < n[0])) {
                    var o = t.bones[this.boneIndex];
                    if (s >= n[n.length - 2]) {
                        for (var h = o.data.rotation + n[n.length - 1] - o.rotation; h > 180;) h -= 360;
                        for (; - 180 > h;) h += 360;
                        return void(o.rotation += h * r)
                    }
                    var l = i.Animation.binarySearch(n, s, 2),
                    d = n[l - 1],
                    u = n[l],
                    c = 1 - (s - u) / (n[l - 2] - u);
                    c = this.curves.getCurvePercent(l / 2 - 1, c);
                    for (var h = n[l + 1] - d; h > 180;) h -= 360;
                    for (; - 180 > h;) h += 360;
                    for (h = o.data.rotation + (d + h * c) - o.rotation; h > 180;) h -= 360;
                    for (; - 180 > h;) h += 360;
                    o.rotation += h * r
                }
            }
        },
        i.TranslateTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = 3 * t
        },
        i.TranslateTimeline.prototype = {
            boneIndex: 0,
            getFrameCount: function() {
                return this.frames.length / 3
            },
            setFrame: function(t, e, i, s) {
                t *= 3,
                this.frames[t] = e,
                this.frames[t + 1] = i,
                this.frames[t + 2] = s
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (! (s < n[0])) {
                    var o = t.bones[this.boneIndex];
                    if (s >= n[n.length - 3]) return o.x += (o.data.x + n[n.length - 2] - o.x) * r,
                    void(o.y += (o.data.y + n[n.length - 1] - o.y) * r);
                    var h = i.Animation.binarySearch(n, s, 3),
                    l = n[h - 2],
                    d = n[h - 1],
                    u = n[h],
                    c = 1 - (s - u) / (n[h + -3] - u);
                    c = this.curves.getCurvePercent(h / 3 - 1, c),
                    o.x += (o.data.x + l + (n[h + 1] - l) * c - o.x) * r,
                    o.y += (o.data.y + d + (n[h + 2] - d) * c - o.y) * r
                }
            }
        },
        i.ScaleTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = 3 * t
        },
        i.ScaleTimeline.prototype = {
            boneIndex: 0,
            getFrameCount: function() {
                return this.frames.length / 3
            },
            setFrame: function(t, e, i, s) {
                t *= 3,
                this.frames[t] = e,
                this.frames[t + 1] = i,
                this.frames[t + 2] = s
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (! (s < n[0])) {
                    var o = t.bones[this.boneIndex];
                    if (s >= n[n.length - 3]) return o.scaleX += (o.data.scaleX * n[n.length - 2] - o.scaleX) * r,
                    void(o.scaleY += (o.data.scaleY * n[n.length - 1] - o.scaleY) * r);
                    var h = i.Animation.binarySearch(n, s, 3),
                    l = n[h - 2],
                    d = n[h - 1],
                    u = n[h],
                    c = 1 - (s - u) / (n[h + -3] - u);
                    c = this.curves.getCurvePercent(h / 3 - 1, c),
                    o.scaleX += (o.data.scaleX * (l + (n[h + 1] - l) * c) - o.scaleX) * r,
                    o.scaleY += (o.data.scaleY * (d + (n[h + 2] - d) * c) - o.scaleY) * r
                }
            }
        },
        i.ColorTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = 5 * t
        },
        i.ColorTimeline.prototype = {
            slotIndex: 0,
            getFrameCount: function() {
                return this.frames.length / 5
            },
            setFrame: function(t, e, i, s, a, r) {
                t *= 5,
                this.frames[t] = e,
                this.frames[t + 1] = i,
                this.frames[t + 2] = s,
                this.frames[t + 3] = a,
                this.frames[t + 4] = r
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (! (s < n[0])) {
                    var o, h, l, d;
                    if (s >= n[n.length - 5]) {
                        var u = n.length - 1;
                        o = n[u - 3],
                        h = n[u - 2],
                        l = n[u - 1],
                        d = n[u]
                    } else {
                        var c = i.Animation.binarySearch(n, s, 5),
                        m = n[c - 4],
                        p = n[c - 3],
                        g = n[c - 2],
                        f = n[c - 1],
                        v = n[c],
                        x = 1 - (s - v) / (n[c - 5] - v);
                        x = this.curves.getCurvePercent(c / 5 - 1, x),
                        o = m + (n[c + 1] - m) * x,
                        h = p + (n[c + 2] - p) * x,
                        l = g + (n[c + 3] - g) * x,
                        d = f + (n[c + 4] - f) * x
                    }
                    var y = t.slots[this.slotIndex];
                    1 > r ? (y.r += (o - y.r) * r, y.g += (h - y.g) * r, y.b += (l - y.b) * r, y.a += (d - y.a) * r) : (y.r = o, y.g = h, y.b = l, y.a = d)
                }
            }
        },
        i.AttachmentTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = t,
            this.attachmentNames = [],
            this.attachmentNames.length = t
        },
        i.AttachmentTimeline.prototype = {
            slotIndex: 0,
            getFrameCount: function() {
                return this.frames.length
            },
            setFrame: function(t, e, i) {
                this.frames[t] = e,
                this.attachmentNames[t] = i
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (s < n[0]) return void(e > s && this.apply(t, e, Number.MAX_VALUE, null, 0));
                e > s && (e = -1);
                var o = s >= n[n.length - 1] ? n.length - 1 : i.Animation.binarySearch1(n, s) - 1;
                if (! (n[o] < e)) {
                    var h = this.attachmentNames[o];
                    t.slots[this.slotIndex].setAttachment(h ? t.getAttachmentBySlotIndex(this.slotIndex, h) : null)
                }
            }
        },
        i.EventTimeline = function(t) {
            this.frames = [],
            this.frames.length = t,
            this.events = [],
            this.events.length = t
        },
        i.EventTimeline.prototype = {
            getFrameCount: function() {
                return this.frames.length
            },
            setFrame: function(t, e, i) {
                this.frames[t] = e,
                this.events[t] = i
            },
            apply: function(t, e, s, a, r) {
                if (a) {
                    var n = this.frames,
                    o = n.length;
                    if (e > s) this.apply(t, e, Number.MAX_VALUE, a, r),
                    e = -1;
                    else if (e >= n[o - 1]) return;
                    if (! (s < n[0])) {
                        var h;
                        if (e < n[0]) h = 0;
                        else {
                            h = i.Animation.binarySearch1(n, e);
                            for (var l = n[h]; h > 0 && n[h - 1] == l;) h--
                        }
                        for (var d = this.events; o > h && s >= n[h]; h++) a.push(d[h])
                    }
                }
            }
        },
        i.DrawOrderTimeline = function(t) {
            this.frames = [],
            this.frames.length = t,
            this.drawOrders = [],
            this.drawOrders.length = t
        },
        i.DrawOrderTimeline.prototype = {
            getFrameCount: function() {
                return this.frames.length
            },
            setFrame: function(t, e, i) {
                this.frames[t] = e,
                this.drawOrders[t] = i
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (! (s < n[0])) {
                    var o;
                    o = s >= n[n.length - 1] ? n.length - 1 : i.Animation.binarySearch1(n, s) - 1;
                    var h = t.drawOrder,
                    l = (t.slots, this.drawOrders[o]);
                    if (l) for (var d = 0,
                    u = l.length; u > d; d++) h[d] = l[d]
                }
            }
        },
        i.FfdTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = t,
            this.frameVertices = [],
            this.frameVertices.length = t
        },
        i.FfdTimeline.prototype = {
            slotIndex: 0,
            attachment: 0,
            getFrameCount: function() {
                return this.frames.length
            },
            setFrame: function(t, e, i) {
                this.frames[t] = e,
                this.frameVertices[t] = i
            },
            apply: function(t, e, s, a, r) {
                var n = t.slots[this.slotIndex];
                if (n.attachment == this.attachment) {
                    var o = this.frames;
                    if (! (s < o[0])) {
                        var h = this.frameVertices,
                        l = h[0].length,
                        d = n.attachmentVertices;
                        if (d.length != l && (r = 1), d.length = l, s >= o[o.length - 1]) {
                            var u = h[o.length - 1];
                            if (1 > r) for (var c = 0; l > c; c++) d[c] += (u[c] - d[c]) * r;
                            else for (var c = 0; l > c; c++) d[c] = u[c]
                        } else {
                            var m = i.Animation.binarySearch1(o, s),
                            p = o[m],
                            g = 1 - (s - p) / (o[m - 1] - p);
                            g = this.curves.getCurvePercent(m - 1, 0 > g ? 0 : g > 1 ? 1 : g);
                            var f = h[m - 1],
                            v = h[m];
                            if (1 > r) for (var c = 0; l > c; c++) {
                                var x = f[c];
                                d[c] += (x + (v[c] - x) * g - d[c]) * r
                            } else for (var c = 0; l > c; c++) {
                                var x = f[c];
                                d[c] = x + (v[c] - x) * g
                            }
                        }
                    }
                }
            }
        },
        i.IkConstraintTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = 3 * t
        },
        i.IkConstraintTimeline.prototype = {
            ikConstraintIndex: 0,
            getFrameCount: function() {
                return this.frames.length / 3
            },
            setFrame: function(t, e, i, s) {
                t *= 3,
                this.frames[t] = e,
                this.frames[t + 1] = i,
                this.frames[t + 2] = s
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (! (s < n[0])) {
                    var o = t.ikConstraints[this.ikConstraintIndex];
                    if (s >= n[n.length - 3]) return o.mix += (n[n.length - 2] - o.mix) * r,
                    void(o.bendDirection = n[n.length - 1]);
                    var h = i.Animation.binarySearch(n, s, 3),
                    l = n[h + -2],
                    d = n[h],
                    u = 1 - (s - d) / (n[h + -3] - d);
                    u = this.curves.getCurvePercent(h / 3 - 1, u);
                    var c = l + (n[h + 1] - l) * u;
                    o.mix += (c - o.mix) * r,
                    o.bendDirection = n[h + -1]
                }
            }
        },
        i.FlipXTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = 2 * t
        },
        i.FlipXTimeline.prototype = {
            boneIndex: 0,
            getFrameCount: function() {
                return this.frames.length / 2
            },
            setFrame: function(t, e, i) {
                t *= 2,
                this.frames[t] = e,
                this.frames[t + 1] = i ? 1 : 0
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (s < n[0]) return void(e > s && this.apply(t, e, Number.MAX_VALUE, null, 0));
                e > s && (e = -1);
                var o = (s >= n[n.length - 2] ? n.length: i.Animation.binarySearch(n, s, 2)) - 2;
                n[o] < e || (t.bones[this.boneIndex].flipX = 0 != n[o + 1])
            }
        },
        i.FlipYTimeline = function(t) {
            this.curves = new i.Curves(t),
            this.frames = [],
            this.frames.length = 2 * t
        },
        i.FlipYTimeline.prototype = {
            boneIndex: 0,
            getFrameCount: function() {
                return this.frames.length / 2
            },
            setFrame: function(t, e, i) {
                t *= 2,
                this.frames[t] = e,
                this.frames[t + 1] = i ? 1 : 0
            },
            apply: function(t, e, s, a, r) {
                var n = this.frames;
                if (s < n[0]) return void(e > s && this.apply(t, e, Number.MAX_VALUE, null, 0));
                e > s && (e = -1);
                var o = (s >= n[n.length - 2] ? n.length: i.Animation.binarySearch(n, s, 2)) - 2;
                n[o] < e || (t.bones[this.boneIndex].flipY = 0 != n[o + 1])
            }
        },
        i.SkeletonData = function() {
            this.bones = [],
            this.slots = [],
            this.skins = [],
            this.events = [],
            this.animations = [],
            this.ikConstraints = []
        },
        i.SkeletonData.prototype = {
            name: null,
            defaultSkin: null,
            width: 0,
            height: 0,
            version: null,
            hash: null,
            findBone: function(t) {
                for (var e = this.bones,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return e[i];
                return null
            },
            findBoneIndex: function(t) {
                for (var e = this.bones,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return i;
                return - 1
            },
            findSlot: function(t) {
                for (var e = this.slots,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return slot[i];
                return null
            },
            findSlotIndex: function(t) {
                for (var e = this.slots,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return i;
                return - 1
            },
            findSkin: function(t) {
                for (var e = this.skins,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return e[i];
                return null
            },
            findEvent: function(t) {
                for (var e = this.events,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return e[i];
                return null
            },
            findAnimation: function(t) {
                for (var e = this.animations,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return e[i];
                return null
            },
            findIkConstraint: function(t) {
                for (var e = this.ikConstraints,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return e[i];
                return null
            }
        },
        i.Skeleton = function(t) {
            this.data = t,
            this.bones = [];
            for (var e = 0,
            s = t.bones.length; s > e; e++) {
                var a = t.bones[e],
                r = a.parent ? this.bones[t.bones.indexOf(a.parent)] : null;
                this.bones.push(new i.Bone(a, this, r))
            }
            this.slots = [],
            this.drawOrder = [];
            for (var e = 0,
            s = t.slots.length; s > e; e++) {
                var n = t.slots[e],
                o = this.bones[t.bones.indexOf(n.boneData)],
                h = new i.Slot(n, o);
                this.slots.push(h),
                this.drawOrder.push(e)
            }
            this.ikConstraints = [];
            for (var e = 0,
            s = t.ikConstraints.length; s > e; e++) this.ikConstraints.push(new i.IkConstraint(t.ikConstraints[e], this));
            this.boneCache = [],
            this.updateCache()
        },
        i.Skeleton.prototype = {
            x: 0,
            y: 0,
            skin: null,
            r: 1,
            g: 1,
            b: 1,
            a: 1,
            time: 0,
            flipX: !1,
            flipY: !1,
            updateCache: function() {
                var t = this.ikConstraints,
                e = t.length,
                i = e + 1,
                s = this.boneCache;
                s.length > i && (s.length = i);
                for (var a = 0,
                r = s.length; r > a; a++) s[a].length = 0;
                for (; s.length < i;) s[s.length] = [];
                var n = s[0],
                o = this.bones;
                t: for (var a = 0,
                r = o.length; r > a; a++) {
                    var h = o[a],
                    l = h;
                    do {
                        for (var d = 0; e > d; d++) for (var u = t[d], c = u.bones[0], m = u.bones[u.bones.length - 1];;) {
                            if (l == m) {
                                s[d].push(h),
                                s[d + 1].push(h);
                                continue t
                            }
                            if (m == c) break;
                            m = m.parent
                        }
                        l = l.parent
                    } while ( l );
                    n[n.length] = h
                }
            },
            updateWorldTransform: function() {
                for (var t = this.bones,
                e = 0,
                i = t.length; i > e; e++) {
                    var s = t[e];
                    s.rotationIK = s.rotation
                }
                for (var e = 0,
                a = this.boneCache.length - 1;;) {
                    for (var r = this.boneCache[e], n = 0, o = r.length; o > n; n++) r[n].updateWorldTransform();
                    if (e == a) break;
                    this.ikConstraints[e].apply(),
                    e++
                }
            },
            setToSetupPose: function() {
                this.setBonesToSetupPose(),
                this.setSlotsToSetupPose()
            },
            setBonesToSetupPose: function() {
                for (var t = this.bones,
                e = 0,
                i = t.length; i > e; e++) t[e].setToSetupPose();
                for (var s = this.ikConstraints,
                e = 0,
                i = s.length; i > e; e++) {
                    var a = s[e];
                    a.bendDirection = a.data.bendDirection,
                    a.mix = a.data.mix
                }
            },
            setSlotsToSetupPose: function() {
                for (var t = this.slots,
                e = 0,
                i = t.length; i > e; e++) t[e].setToSetupPose(e);
                this.resetDrawOrder()
            },
            getRootBone: function() {
                return this.bones.length ? this.bones[0] : null
            },
            findBone: function(t) {
                for (var e = this.bones,
                i = 0,
                s = e.length; s > i; i++) if (e[i].data.name == t) return e[i];
                return null
            },
            findBoneIndex: function(t) {
                for (var e = this.bones,
                i = 0,
                s = e.length; s > i; i++) if (e[i].data.name == t) return i;
                return - 1
            },
            findSlot: function(t) {
                for (var e = this.slots,
                i = 0,
                s = e.length; s > i; i++) if (e[i].data.name == t) return e[i];
                return null
            },
            findSlotIndex: function(t) {
                for (var e = this.slots,
                i = 0,
                s = e.length; s > i; i++) if (e[i].data.name == t) return i;
                return - 1
            },
            setSkinByName: function(t) {
                var e = this.data.findSkin(t);
                if (!e) throw "Skin not found: " + t;
                this.setSkin(e)
            },
            setSkin: function(t) {
                if (t) if (this.skin) t._attachAll(this, this.skin);
                else for (var e = this.slots,
                i = 0,
                s = e.length; s > i; i++) {
                    var a = e[i],
                    r = a.data.attachmentName;
                    if (r) {
                        var n = t.getAttachment(i, r);
                        n && a.setAttachment(n)
                    }
                }
                this.skin = t
            },
            getAttachmentBySlotName: function(t, e) {
                return this.getAttachmentBySlotIndex(this.data.findSlotIndex(t), e)
            },
            getAttachmentBySlotIndex: function(t, e) {
                if (this.skin) {
                    var i = this.skin.getAttachment(t, e);
                    if (i) return i
                }
                return this.data.defaultSkin ? this.data.defaultSkin.getAttachment(t, e) : null
            },
            setAttachment: function(t, e) {
                for (var i = this.slots,
                s = 0,
                a = i.length; a > s; s++) {
                    var r = i[s];
                    if (r.data.name == t) {
                        var n = null;
                        if (e && (n = this.getAttachmentBySlotIndex(s, e), !n)) throw "Attachment not found: " + e + ", for slot: " + t;
                        return void r.setAttachment(n)
                    }
                }
                throw "Slot not found: " + t
            },
            findIkConstraint: function(t) {
                for (var e = this.ikConstraints,
                i = 0,
                s = e.length; s > i; i++) if (e[i].data.name == t) return e[i];
                return null
            },
            update: function(t) {
                this.time += t
            },
            resetDrawOrder: function() {
                for (var t = 0,
                e = this.drawOrder.length; e > t; t++) this.drawOrder[t] = t
            }
        },
        i.EventData = function(t) {
            this.name = t
        },
        i.EventData.prototype = {
            intValue: 0,
            floatValue: 0,
            stringValue: null
        },
        i.Event = function(t) {
            this.data = t
        },
        i.Event.prototype = {
            intValue: 0,
            floatValue: 0,
            stringValue: null
        },
        i.AttachmentType = {
            region: 0,
            boundingbox: 1,
            mesh: 2,
            skinnedmesh: 3
        },
        i.RegionAttachment = function(t) {
            this.name = t,
            this.offset = [],
            this.offset.length = 8,
            this.uvs = [],
            this.uvs.length = 8
        },
        i.RegionAttachment.prototype = {
            type: i.AttachmentType.region,
            x: 0,
            y: 0,
            rotation: 0,
            scaleX: 1,
            scaleY: 1,
            width: 0,
            height: 0,
            r: 1,
            g: 1,
            b: 1,
            a: 1,
            path: null,
            rendererObject: null,
            regionOffsetX: 0,
            regionOffsetY: 0,
            regionWidth: 0,
            regionHeight: 0,
            regionOriginalWidth: 0,
            regionOriginalHeight: 0,
            setUVs: function(t, e, i, s, a) {
                var r = this.uvs;
                a ? (r[2] = t, r[3] = s, r[4] = t, r[5] = e, r[6] = i, r[7] = e, r[0] = i, r[1] = s) : (r[0] = t, r[1] = s, r[2] = t, r[3] = e, r[4] = i, r[5] = e, r[6] = i, r[7] = s)
            },
            updateOffset: function() {
                var t = this.width / this.regionOriginalWidth * this.scaleX,
                e = this.height / this.regionOriginalHeight * this.scaleY,
                s = -this.width / 2 * this.scaleX + this.regionOffsetX * t,
                a = -this.height / 2 * this.scaleY + this.regionOffsetY * e,
                r = s + this.regionWidth * t,
                n = a + this.regionHeight * e,
                o = this.rotation * i.degRad,
                h = Math.cos(o),
                l = Math.sin(o),
                d = s * h + this.x,
                u = s * l,
                c = a * h + this.y,
                m = a * l,
                p = r * h + this.x,
                g = r * l,
                f = n * h + this.y,
                v = n * l,
                x = this.offset;
                x[0] = d - m,
                x[1] = c + u,
                x[2] = d - v,
                x[3] = f + u,
                x[4] = p - v,
                x[5] = f + g,
                x[6] = p - m,
                x[7] = c + g
            },
            computeVertices: function(t, e, i, s) {
                t += i.worldX,
                e += i.worldY;
                var a = i.m00,
                r = i.m01,
                n = i.m10,
                o = i.m11,
                h = this.offset;
                s[0] = h[0] * a + h[1] * r + t,
                s[1] = h[0] * n + h[1] * o + e,
                s[2] = h[2] * a + h[3] * r + t,
                s[3] = h[2] * n + h[3] * o + e,
                s[4] = h[4] * a + h[5] * r + t,
                s[5] = h[4] * n + h[5] * o + e,
                s[6] = h[6] * a + h[7] * r + t,
                s[7] = h[6] * n + h[7] * o + e
            }
        },
        i.MeshAttachment = function(t) {
            this.name = t
        },
        i.MeshAttachment.prototype = {
            type: i.AttachmentType.mesh,
            vertices: null,
            uvs: null,
            regionUVs: null,
            triangles: null,
            hullLength: 0,
            r: 1,
            g: 1,
            b: 1,
            a: 1,
            path: null,
            rendererObject: null,
            regionU: 0,
            regionV: 0,
            regionU2: 0,
            regionV2: 0,
            regionRotate: !1,
            regionOffsetX: 0,
            regionOffsetY: 0,
            regionWidth: 0,
            regionHeight: 0,
            regionOriginalWidth: 0,
            regionOriginalHeight: 0,
            edges: null,
            width: 0,
            height: 0,
            updateUVs: function() {
                var t = this.regionU2 - this.regionU,
                e = this.regionV2 - this.regionV,
                s = this.regionUVs.length;
                if (this.uvs && this.uvs.length == s || (this.uvs = new i.Float32Array(s)), this.regionRotate) for (var a = 0; s > a; a += 2) this.uvs[a] = this.regionU + this.regionUVs[a + 1] * t,
                this.uvs[a + 1] = this.regionV + e - this.regionUVs[a] * e;
                else for (var a = 0; s > a; a += 2) this.uvs[a] = this.regionU + this.regionUVs[a] * t,
                this.uvs[a + 1] = this.regionV + this.regionUVs[a + 1] * e
            },
            computeWorldVertices: function(t, e, i, s) {
                var a = i.bone;
                t += a.worldX,
                e += a.worldY;
                var r = a.m00,
                n = a.m01,
                o = a.m10,
                h = a.m11,
                l = this.vertices,
                d = l.length;
                i.attachmentVertices.length == d && (l = i.attachmentVertices);
                for (var u = 0; d > u; u += 2) {
                    var c = l[u],
                    m = l[u + 1];
                    s[u] = c * r + m * n + t,
                    s[u + 1] = c * o + m * h + e
                }
            }
        },
        i.SkinnedMeshAttachment = function(t) {
            this.name = t
        },
        i.SkinnedMeshAttachment.prototype = {
            type: i.AttachmentType.skinnedmesh,
            bones: null,
            weights: null,
            uvs: null,
            regionUVs: null,
            triangles: null,
            hullLength: 0,
            r: 1,
            g: 1,
            b: 1,
            a: 1,
            path: null,
            rendererObject: null,
            regionU: 0,
            regionV: 0,
            regionU2: 0,
            regionV2: 0,
            regionRotate: !1,
            regionOffsetX: 0,
            regionOffsetY: 0,
            regionWidth: 0,
            regionHeight: 0,
            regionOriginalWidth: 0,
            regionOriginalHeight: 0,
            edges: null,
            width: 0,
            height: 0,
            updateUVs: function(t, e, s, a, r) {
                var n = this.regionU2 - this.regionU,
                o = this.regionV2 - this.regionV,
                h = this.regionUVs.length;
                if (this.uvs && this.uvs.length == h || (this.uvs = new i.Float32Array(h)), this.regionRotate) for (var l = 0; h > l; l += 2) this.uvs[l] = this.regionU + this.regionUVs[l + 1] * n,
                this.uvs[l + 1] = this.regionV + o - this.regionUVs[l] * o;
                else for (var l = 0; h > l; l += 2) this.uvs[l] = this.regionU + this.regionUVs[l] * n,
                this.uvs[l + 1] = this.regionV + this.regionUVs[l + 1] * o
            },
            computeWorldVertices: function(t, e, i, s) {
                var a, r, n, o, h, l, d, u = i.bone.skeleton.bones,
                c = this.weights,
                m = this.bones,
                p = 0,
                g = 0,
                f = 0,
                v = 0,
                x = m.length;
                if (i.attachmentVertices.length) for (var y = i.attachmentVertices; x > g; p += 2) {
                    for (r = 0, n = 0, a = m[g++] + g; a > g; g++, f += 3, v += 2) o = u[m[g]],
                    h = c[f] + y[v],
                    l = c[f + 1] + y[v + 1],
                    d = c[f + 2],
                    r += (h * o.m00 + l * o.m01 + o.worldX) * d,
                    n += (h * o.m10 + l * o.m11 + o.worldY) * d;
                    s[p] = r + t,
                    s[p + 1] = n + e
                } else for (; x > g; p += 2) {
                    for (r = 0, n = 0, a = m[g++] + g; a > g; g++, f += 3) o = u[m[g]],
                    h = c[f],
                    l = c[f + 1],
                    d = c[f + 2],
                    r += (h * o.m00 + l * o.m01 + o.worldX) * d,
                    n += (h * o.m10 + l * o.m11 + o.worldY) * d;
                    s[p] = r + t,
                    s[p + 1] = n + e
                }
            }
        },
        i.BoundingBoxAttachment = function(t) {
            this.name = t,
            this.vertices = []
        },
        i.BoundingBoxAttachment.prototype = {
            type: i.AttachmentType.boundingbox,
            computeWorldVertices: function(t, e, i, s) {
                t += i.worldX,
                e += i.worldY;
                for (var a = i.m00,
                r = i.m01,
                n = i.m10,
                o = i.m11,
                h = this.vertices,
                l = 0,
                d = h.length; d > l; l += 2) {
                    var u = h[l],
                    c = h[l + 1];
                    s[l] = u * a + c * r + t,
                    s[l + 1] = u * n + c * o + e
                }
            }
        },
        i.AnimationStateData = function(t) {
            this.skeletonData = t,
            this.animationToMixTime = {}
        },
        i.AnimationStateData.prototype = {
            defaultMix: 0,
            setMixByName: function(t, e, i) {
                var s = this.skeletonData.findAnimation(t);
                if (!s) throw "Animation not found: " + t;
                var a = this.skeletonData.findAnimation(e);
                if (!a) throw "Animation not found: " + e;
                this.setMix(s, a, i)
            },
            setMix: function(t, e, i) {
                this.animationToMixTime[t.name + ":" + e.name] = i
            },
            getMix: function(t, e) {
                var i = t.name + ":" + e.name;
                return this.animationToMixTime.hasOwnProperty(i) ? this.animationToMixTime[i] : this.defaultMix
            }
        },
        i.TrackEntry = function() {},
        i.TrackEntry.prototype = {
            next: null,
            previous: null,
            animation: null,
            loop: !1,
            delay: 0,
            time: 0,
            lastTime: -1,
            endTime: 0,
            timeScale: 1,
            mixTime: 0,
            mixDuration: 0,
            mix: 1,
            onStart: null,
            onEnd: null,
            onComplete: null,
            onEvent: null
        },
        i.AnimationState = function(t) {
            this.data = t,
            this.tracks = [],
            this.events = []
        },
        i.AnimationState.prototype = {
            onStart: null,
            onEnd: null,
            onComplete: null,
            onEvent: null,
            timeScale: 1,
            update: function(t) {
                t *= this.timeScale;
                for (var e = 0; e < this.tracks.length; e++) {
                    var i = this.tracks[e];
                    if (i) {
                        if (i.time += t * i.timeScale, i.previous) {
                            var s = t * i.previous.timeScale;
                            i.previous.time += s,
                            i.mixTime += s
                        }
                        var a = i.next;
                        a ? (a.time = i.lastTime - a.delay, a.time >= 0 && this.setCurrent(e, a)) : !i.loop && i.lastTime >= i.endTime && this.clearTrack(e)
                    }
                }
            },
            apply: function(t) {
                t.resetDrawOrder();
                for (var e = 0; e < this.tracks.length; e++) {
                    var i = this.tracks[e];
                    if (i) {
                        this.events.length = 0;
                        var s = i.time,
                        a = i.lastTime,
                        r = i.endTime,
                        n = i.loop; ! n && s > r && (s = r);
                        var o = i.previous;
                        if (o) {
                            var h = o.time; ! o.loop && h > o.endTime && (h = o.endTime),
                            o.animation.apply(t, h, h, o.loop, null);
                            var l = i.mixTime / i.mixDuration * i.mix;
                            l >= 1 && (l = 1, i.previous = null),
                            i.animation.mix(t, i.lastTime, s, n, this.events, l)
                        } else 1 == i.mix ? i.animation.apply(t, i.lastTime, s, n, this.events) : i.animation.mix(t, i.lastTime, s, n, this.events, i.mix);
                        for (var d = 0,
                        u = this.events.length; u > d; d++) {
                            var c = this.events[d];
                            i.onEvent && i.onEvent(e, c),
                            this.onEvent && this.onEvent(e, c)
                        }
                        if (n ? a % r > s % r: r > a && s >= r) {
                            var m = Math.floor(s / r);
                            i.onComplete && i.onComplete(e, m),
                            this.onComplete && this.onComplete(e, m)
                        }
                        i.lastTime = i.time
                    }
                }
            },
            clearTracks: function() {
                for (var t = 0,
                e = this.tracks.length; e > t; t++) this.clearTrack(t);
                this.tracks.length = 0
            },
            clearTrack: function(t) {
                if (! (t >= this.tracks.length)) {
                    var e = this.tracks[t];
                    e && (e.onEnd && e.onEnd(t), this.onEnd && this.onEnd(t), this.tracks[t] = null)
                }
            },
            _expandToIndex: function(t) {
                if (t < this.tracks.length) return this.tracks[t];
                for (; t >= this.tracks.length;) this.tracks.push(null);
                return null
            },
            setCurrent: function(t, e) {
                var i = this._expandToIndex(t);
                if (i) {
                    var s = i.previous;
                    i.previous = null,
                    i.onEnd && i.onEnd(t),
                    this.onEnd && this.onEnd(t),
                    e.mixDuration = this.data.getMix(i.animation, e.animation),
                    e.mixDuration > 0 && (e.mixTime = 0, s && i.mixTime / i.mixDuration < .5 ? e.previous = s: e.previous = i)
                }
                this.tracks[t] = e,
                e.onStart && e.onStart(t),
                this.onStart && this.onStart(t)
            },
            setAnimationByName: function(t, e, i) {
                var s = this.data.skeletonData.findAnimation(e);
                if (!s) throw "Animation not found: " + e;
                return this.setAnimation(t, s, i)
            },
            setAnimation: function(t, e, s) {
                var a = new i.TrackEntry;
                return a.animation = e,
                a.loop = s,
                a.endTime = e.duration,
                this.setCurrent(t, a),
                a
            },
            addAnimationByName: function(t, e, i, s) {
                var a = this.data.skeletonData.findAnimation(e);
                if (!a) throw "Animation not found: " + e;
                return this.addAnimation(t, a, i, s)
            },
            addAnimation: function(t, e, s, a) {
                var r = new i.TrackEntry;
                r.animation = e,
                r.loop = s,
                r.endTime = e.duration;
                var n = this._expandToIndex(t);
                if (n) {
                    for (; n.next;) n = n.next;
                    n.next = r
                } else this.tracks[t] = r;
                return 0 >= a && (n ? a += n.endTime - this.data.getMix(n.animation, e) : a = 0),
                r.delay = a,
                r
            },
            getCurrent: function(t) {
                return t >= this.tracks.length ? null: this.tracks[t]
            }
        },
        i.SkeletonJson = function(t) {
            this.attachmentLoader = t
        },
        i.SkeletonJson.prototype = {
            scale: 1,
            readSkeletonData: function(t, e) {
                var s = new i.SkeletonData;
                s.name = e;
                var a = t.skeleton;
                a && (s.hash = a.hash, s.version = a.spine, s.width = a.width || 0, s.height = a.height || 0);
                for (var r = t.bones,
                n = 0,
                o = r.length; o > n; n++) {
                    var h = r[n],
                    l = null;
                    if (h.parent && (l = s.findBone(h.parent), !l)) throw "Parent bone not found: " + h.parent;
                    var d = new i.BoneData(h.name, l);
                    d.length = (h.length || 0) * this.scale,
                    d.x = (h.x || 0) * this.scale,
                    d.y = (h.y || 0) * this.scale,
                    d.rotation = h.rotation || 0,
                    d.scaleX = h.hasOwnProperty("scaleX") ? h.scaleX: 1,
                    d.scaleY = h.hasOwnProperty("scaleY") ? h.scaleY: 1,
                    d.inheritScale = h.hasOwnProperty("inheritScale") ? h.inheritScale: !0,
                    d.inheritRotation = h.hasOwnProperty("inheritRotation") ? h.inheritRotation: !0,
                    s.bones.push(d)
                }
                var u = t.ik;
                if (u) for (var n = 0,
                o = u.length; o > n; n++) {
                    for (var c = u[n], m = new i.IkConstraintData(c.name), r = c.bones, p = 0, g = r.length; g > p; p++) {
                        var f = s.findBone(r[p]);
                        if (!f) throw "IK bone not found: " + r[p];
                        m.bones.push(f)
                    }
                    if (m.target = s.findBone(c.target), !m.target) throw "Target bone not found: " + c.target;
                    m.bendDirection = !c.hasOwnProperty("bendPositive") || c.bendPositive ? 1 : -1,
                    m.mix = c.hasOwnProperty("mix") ? c.mix: 1,
                    s.ikConstraints.push(m)
                }
                for (var v = t.slots,
                n = 0,
                o = v.length; o > n; n++) {
                    var x = v[n],
                    d = s.findBone(x.bone);
                    if (!d) throw "Slot bone not found: " + x.bone;
                    var y = new i.SlotData(x.name, d),
                    b = x.color;
                    b && (y.r = this.toColor(b, 0), y.g = this.toColor(b, 1), y.b = this.toColor(b, 2), y.a = this.toColor(b, 3)),
                    y.attachmentName = x.attachment,
                    y.additiveBlending = x.additive && "true" == x.additive,
                    s.slots.push(y)
                }
                var w = t.skins;
                for (var S in w) if (w.hasOwnProperty(S)) {
                    var A = w[S],
                    P = new i.Skin(S);
                    for (var T in A) if (A.hasOwnProperty(T)) {
                        var C = s.findSlotIndex(T),
                        M = A[T];
                        for (var G in M) if (M.hasOwnProperty(G)) {
                            var E = this.readAttachment(P, G, M[G]);
                            E && P.addAttachment(C, G, E)
                        }
                    }
                    s.skins.push(P),
                    "default" == P.name && (s.defaultSkin = P)
                }
                var j = t.events;
                for (var I in j) if (j.hasOwnProperty(I)) {
                    var R = j[I],
                    _ = new i.EventData(I);
                    _.intValue = R["int"] || 0,
                    _.floatValue = R["float"] || 0,
                    _.stringValue = R.string || null,
                    s.events.push(_)
                }
                var L = t.animations;
                for (var F in L) L.hasOwnProperty(F) && this.readAnimation(F, L[F], s);
                return s
            },
            readAttachment: function(t, e, s) {
                e = s.name || e;
                var a = i.AttachmentType[s.type || "region"],
                r = s.path || e,
                n = this.scale;
                if (a == i.AttachmentType.region) {
                    var o = this.attachmentLoader.newRegionAttachment(t, e, r);
                    if (!o) return null;
                    o.path = r,
                    o.x = (s.x || 0) * n,
                    o.y = (s.y || 0) * n,
                    o.scaleX = s.hasOwnProperty("scaleX") ? s.scaleX: 1,
                    o.scaleY = s.hasOwnProperty("scaleY") ? s.scaleY: 1,
                    o.rotation = s.rotation || 0,
                    o.width = (s.width || 0) * n,
                    o.height = (s.height || 0) * n;
                    var h = s.color;
                    return h && (o.r = this.toColor(h, 0), o.g = this.toColor(h, 1), o.b = this.toColor(h, 2), o.a = this.toColor(h, 3)),
                    o.updateOffset(),
                    o
                }
                if (a == i.AttachmentType.mesh) {
                    var l = this.attachmentLoader.newMeshAttachment(t, e, r);
                    return l ? (l.path = r, l.vertices = this.getFloatArray(s, "vertices", n), l.triangles = this.getIntArray(s, "triangles"), l.regionUVs = this.getFloatArray(s, "uvs", 1), l.updateUVs(), h = s.color, h && (l.r = this.toColor(h, 0), l.g = this.toColor(h, 1), l.b = this.toColor(h, 2), l.a = this.toColor(h, 3)), l.hullLength = 2 * (s.hull || 0), s.edges && (l.edges = this.getIntArray(s, "edges")), l.width = (s.width || 0) * n, l.height = (s.height || 0) * n, l) : null
                }
                if (a == i.AttachmentType.skinnedmesh) {
                    var l = this.attachmentLoader.newSkinnedMeshAttachment(t, e, r);
                    if (!l) return null;
                    l.path = r;
                    for (var d = this.getFloatArray(s, "uvs", 1), u = this.getFloatArray(s, "vertices", 1), c = [], m = [], p = 0, g = u.length; g > p;) {
                        var f = 0 | u[p++];
                        m[m.length] = f;
                        for (var v = p + 4 * f; v > p;) m[m.length] = u[p],
                        c[c.length] = u[p + 1] * n,
                        c[c.length] = u[p + 2] * n,
                        c[c.length] = u[p + 3],
                        p += 4
                    }
                    return l.bones = m,
                    l.weights = c,
                    l.triangles = this.getIntArray(s, "triangles"),
                    l.regionUVs = d,
                    l.updateUVs(),
                    h = s.color,
                    h && (l.r = this.toColor(h, 0), l.g = this.toColor(h, 1), l.b = this.toColor(h, 2), l.a = this.toColor(h, 3)),
                    l.hullLength = 2 * (s.hull || 0),
                    s.edges && (l.edges = this.getIntArray(s, "edges")),
                    l.width = (s.width || 0) * n,
                    l.height = (s.height || 0) * n,
                    l
                }
                if (a == i.AttachmentType.boundingbox) {
                    for (var x = this.attachmentLoader.newBoundingBoxAttachment(t, e), u = s.vertices, p = 0, g = u.length; g > p; p++) x.vertices.push(u[p] * n);
                    return x
                }
                throw "Unknown attachment type: " + a
            },
            readAnimation: function(t, e, s) {
                var a = [],
                r = 0,
                n = e.slots;
                for (var o in n) if (n.hasOwnProperty(o)) {
                    var h = n[o],
                    l = s.findSlotIndex(o);
                    for (var d in h) if (h.hasOwnProperty(d)) {
                        var u = h[d];
                        if ("color" == d) {
                            var c = new i.ColorTimeline(u.length);
                            c.slotIndex = l;
                            for (var m = 0,
                            p = 0,
                            g = u.length; g > p; p++) {
                                var f = u[p],
                                v = f.color,
                                x = this.toColor(v, 0),
                                y = this.toColor(v, 1),
                                b = this.toColor(v, 2),
                                w = this.toColor(v, 3);
                                c.setFrame(m, f.time, x, y, b, w),
                                this.readCurve(c, m, f),
                                m++
                            }
                            a.push(c),
                            r = Math.max(r, c.frames[5 * c.getFrameCount() - 5])
                        } else {
                            if ("attachment" != d) throw "Invalid timeline type for a slot: " + d + " (" + o + ")";
                            var c = new i.AttachmentTimeline(u.length);
                            c.slotIndex = l;
                            for (var m = 0,
                            p = 0,
                            g = u.length; g > p; p++) {
                                var f = u[p];
                                c.setFrame(m++, f.time, f.name)
                            }
                            a.push(c),
                            r = Math.max(r, c.frames[c.getFrameCount() - 1])
                        }
                    }
                }
                var S = e.bones;
                for (var A in S) if (S.hasOwnProperty(A)) {
                    var P = s.findBoneIndex(A);
                    if ( - 1 == P) throw "Bone not found: " + A;
                    var T = S[A];
                    for (var d in T) if (T.hasOwnProperty(d)) {
                        var u = T[d];
                        if ("rotate" == d) {
                            var c = new i.RotateTimeline(u.length);
                            c.boneIndex = P;
                            for (var m = 0,
                            p = 0,
                            g = u.length; g > p; p++) {
                                var f = u[p];
                                c.setFrame(m, f.time, f.angle),
                                this.readCurve(c, m, f),
                                m++
                            }
                            a.push(c),
                            r = Math.max(r, c.frames[2 * c.getFrameCount() - 2])
                        } else if ("translate" == d || "scale" == d) {
                            var c, C = 1;
                            "scale" == d ? c = new i.ScaleTimeline(u.length) : (c = new i.TranslateTimeline(u.length), C = this.scale),
                            c.boneIndex = P;
                            for (var m = 0,
                            p = 0,
                            g = u.length; g > p; p++) {
                                var f = u[p],
                                M = (f.x || 0) * C,
                                G = (f.y || 0) * C;
                                c.setFrame(m, f.time, M, G),
                                this.readCurve(c, m, f),
                                m++
                            }
                            a.push(c),
                            r = Math.max(r, c.frames[3 * c.getFrameCount() - 3])
                        } else {
                            if ("flipX" != d && "flipY" != d) throw "Invalid timeline type for a bone: " + d + " (" + A + ")";
                            var M = "flipX" == d,
                            c = M ? new i.FlipXTimeline(u.length) : new i.FlipYTimeline(u.length);
                            c.boneIndex = P;
                            for (var E = M ? "x": "y", m = 0, p = 0, g = u.length; g > p; p++) {
                                var f = u[p];
                                c.setFrame(m, f.time, f[E] || !1),
                                m++
                            }
                            a.push(c),
                            r = Math.max(r, c.frames[2 * c.getFrameCount() - 2])
                        }
                    }
                }
                var j = e.ik;
                for (var I in j) if (j.hasOwnProperty(I)) {
                    var R = s.findIkConstraint(I),
                    u = j[I],
                    c = new i.IkConstraintTimeline(u.length);
                    c.ikConstraintIndex = s.ikConstraints.indexOf(R);
                    for (var m = 0,
                    p = 0,
                    g = u.length; g > p; p++) {
                        var f = u[p],
                        _ = f.hasOwnProperty("mix") ? f.mix: 1,
                        L = !f.hasOwnProperty("bendPositive") || f.bendPositive ? 1 : -1;
                        c.setFrame(m, f.time, _, L),
                        this.readCurve(c, m, f),
                        m++
                    }
                    a.push(c),
                    r = Math.max(r, c.frames[3 * c.getFrameCount() - 3])
                }
                var F = e.ffd;
                for (var B in F) {
                    var O = s.findSkin(B),
                    h = F[B];
                    for (o in h) {
                        var l = s.findSlotIndex(o),
                        D = h[o];
                        for (var k in D) {
                            var u = D[k],
                            c = new i.FfdTimeline(u.length),
                            U = O.getAttachment(l, k);
                            if (!U) throw "FFD attachment not found: " + k;
                            c.slotIndex = l,
                            c.attachment = U;
                            var N, z = U.type == i.AttachmentType.mesh;
                            N = z ? U.vertices.length: U.weights.length / 3 * 2;
                            for (var m = 0,
                            p = 0,
                            g = u.length; g > p; p++) {
                                var W, f = u[p];
                                if (f.vertices) {
                                    var V = f.vertices,
                                    W = [];
                                    W.length = N;
                                    var X = f.offset || 0,
                                    H = V.length;
                                    if (1 == this.scale) for (var Y = 0; H > Y; Y++) W[Y + X] = V[Y];
                                    else for (var Y = 0; H > Y; Y++) W[Y + X] = V[Y] * this.scale;
                                    if (z) for (var q = U.vertices,
                                    Y = 0,
                                    H = W.length; H > Y; Y++) W[Y] += q[Y]
                                } else z ? W = U.vertices: (W = [], W.length = N);
                                c.setFrame(m, f.time, W),
                                this.readCurve(c, m, f),
                                m++
                            }
                            a[a.length] = c,
                            r = Math.max(r, c.frames[c.getFrameCount() - 1])
                        }
                    }
                }
                var J = e.drawOrder;
                if (J || (J = e.draworder), J) {
                    for (var c = new i.DrawOrderTimeline(J.length), K = s.slots.length, m = 0, p = 0, g = J.length; g > p; p++) {
                        var Q = J[p],
                        $ = null;
                        if (Q.offsets) {
                            $ = [],
                            $.length = K;
                            for (var Y = K - 1; Y >= 0; Y--) $[Y] = -1;
                            var Z = Q.offsets,
                            tt = [];
                            tt.length = K - Z.length;
                            for (var et = 0,
                            it = 0,
                            Y = 0,
                            H = Z.length; H > Y; Y++) {
                                var st = Z[Y],
                                l = s.findSlotIndex(st.slot);
                                if ( - 1 == l) throw "Slot not found: " + st.slot;
                                for (; et != l;) tt[it++] = et++;
                                $[et + st.offset] = et++
                            }
                            for (; K > et;) tt[it++] = et++;
                            for (var Y = K - 1; Y >= 0; Y--) - 1 == $[Y] && ($[Y] = tt[--it])
                        }
                        c.setFrame(m++, Q.time, $)
                    }
                    a.push(c),
                    r = Math.max(r, c.frames[c.getFrameCount() - 1])
                }
                var at = e.events;
                if (at) {
                    for (var c = new i.EventTimeline(at.length), m = 0, p = 0, g = at.length; g > p; p++) {
                        var rt = at[p],
                        nt = s.findEvent(rt.name);
                        if (!nt) throw "Event not found: " + rt.name;
                        var ot = new i.Event(nt);
                        ot.intValue = rt.hasOwnProperty("int") ? rt["int"] : nt.intValue,
                        ot.floatValue = rt.hasOwnProperty("float") ? rt["float"] : nt.floatValue,
                        ot.stringValue = rt.hasOwnProperty("string") ? rt.string: nt.stringValue,
                        c.setFrame(m++, rt.time, ot)
                    }
                    a.push(c),
                    r = Math.max(r, c.frames[c.getFrameCount() - 1])
                }
                s.animations.push(new i.Animation(t, a, r))
            },
            readCurve: function(t, e, i) {
                var s = i.curve;
                s ? "stepped" == s ? t.curves.setStepped(e) : s instanceof Array && t.curves.setCurve(e, s[0], s[1], s[2], s[3]) : t.curves.setLinear(e)
            },
            toColor: function(t, e) {
                if (8 != t.length) throw "Color hexidecimal length must be 8, recieved: " + t;
                return parseInt(t.substring(2 * e, 2 * e + 2), 16) / 255
            },
            getFloatArray: function(t, e, s) {
                var a = t[e],
                r = new i.Float32Array(a.length),
                n = 0,
                o = a.length;
                if (1 == s) for (; o > n; n++) r[n] = a[n];
                else for (; o > n; n++) r[n] = a[n] * s;
                return r
            },
            getIntArray: function(t, e) {
                for (var s = t[e], a = new i.Uint16Array(s.length), r = 0, n = s.length; n > r; r++) a[r] = 0 | s[r];
                return a
            }
        },
        i.Atlas = function(t, e) {
            this.textureLoader = e,
            this.pages = [],
            this.regions = [];
            var s = new i.AtlasReader(t),
            a = [];
            a.length = 4;
            for (var r = null;;) {
                var n = s.readLine();
                if (null === n) break;
                if (n = s.trim(n), n.length) if (r) {
                    var o = new i.AtlasRegion;
                    o.name = n,
                    o.page = r,
                    o.rotate = "true" == s.readValue(),
                    s.readTuple(a);
                    var h = parseInt(a[0]),
                    l = parseInt(a[1]);
                    s.readTuple(a);
                    var d = parseInt(a[0]),
                    u = parseInt(a[1]);
                    o.u = h / r.width,
                    o.v = l / r.height,
                    o.rotate ? (o.u2 = (h + u) / r.width, o.v2 = (l + d) / r.height) : (o.u2 = (h + d) / r.width, o.v2 = (l + u) / r.height),
                    o.x = h,
                    o.y = l,
                    o.width = Math.abs(d),
                    o.height = Math.abs(u),
                    4 == s.readTuple(a) && (o.splits = [parseInt(a[0]), parseInt(a[1]), parseInt(a[2]), parseInt(a[3])], 4 == s.readTuple(a) && (o.pads = [parseInt(a[0]), parseInt(a[1]), parseInt(a[2]), parseInt(a[3])], s.readTuple(a))),
                    o.originalWidth = parseInt(a[0]),
                    o.originalHeight = parseInt(a[1]),
                    s.readTuple(a),
                    o.offsetX = parseInt(a[0]),
                    o.offsetY = parseInt(a[1]),
                    o.index = parseInt(s.readValue()),
                    this.regions.push(o)
                } else {
                    r = new i.AtlasPage,
                    r.name = n,
                    2 == s.readTuple(a) && (r.width = parseInt(a[0]), r.height = parseInt(a[1]), s.readTuple(a)),
                    r.format = i.Atlas.Format[a[0]],
                    s.readTuple(a),
                    r.minFilter = i.Atlas.TextureFilter[a[0]],
                    r.magFilter = i.Atlas.TextureFilter[a[1]];
                    var c = s.readValue();
                    r.uWrap = i.Atlas.TextureWrap.clampToEdge,
                    r.vWrap = i.Atlas.TextureWrap.clampToEdge,
                    "x" == c ? r.uWrap = i.Atlas.TextureWrap.repeat: "y" == c ? r.vWrap = i.Atlas.TextureWrap.repeat: "xy" == c && (r.uWrap = r.vWrap = i.Atlas.TextureWrap.repeat),
                    e.load(r, n, this),
                    this.pages.push(r)
                } else r = null
            }
        },
        i.Atlas.prototype = {
            findRegion: function(t) {
                for (var e = this.regions,
                i = 0,
                s = e.length; s > i; i++) if (e[i].name == t) return e[i];
                return null
            },
            dispose: function() {
                for (var t = this.pages,
                e = 0,
                i = t.length; i > e; e++) this.textureLoader.unload(t[e].rendererObject)
            },
            updateUVs: function(t) {
                for (var e = this.regions,
                i = 0,
                s = e.length; s > i; i++) {
                    var a = e[i];
                    a.page == t && (a.u = a.x / t.width, a.v = a.y / t.height, a.rotate ? (a.u2 = (a.x + a.height) / t.width, a.v2 = (a.y + a.width) / t.height) : (a.u2 = (a.x + a.width) / t.width, a.v2 = (a.y + a.height) / t.height))
                }
            }
        },
        i.Atlas.Format = {
            alpha: 0,
            intensity: 1,
            luminanceAlpha: 2,
            rgb565: 3,
            rgba4444: 4,
            rgb888: 5,
            rgba8888: 6
        },
        i.Atlas.TextureFilter = {
            nearest: 0,
            linear: 1,
            mipMap: 2,
            mipMapNearestNearest: 3,
            mipMapLinearNearest: 4,
            mipMapNearestLinear: 5,
            mipMapLinearLinear: 6
        },
        i.Atlas.TextureWrap = {
            mirroredRepeat: 0,
            clampToEdge: 1,
            repeat: 2
        },
        i.AtlasPage = function() {},
        i.AtlasPage.prototype = {
            name: null,
            format: null,
            minFilter: null,
            magFilter: null,
            uWrap: null,
            vWrap: null,
            rendererObject: null,
            width: 0,
            height: 0
        },
        i.AtlasRegion = function() {},
        i.AtlasRegion.prototype = {
            page: null,
            name: null,
            x: 0,
            y: 0,
            width: 0,
            height: 0,
            u: 0,
            v: 0,
            u2: 0,
            v2: 0,
            offsetX: 0,
            offsetY: 0,
            originalWidth: 0,
            originalHeight: 0,
            index: 0,
            rotate: !1,
            splits: null,
            pads: null
        },
        i.AtlasReader = function(t) {
            this.lines = t.split(/\r\n|\r|\n/)
        },
        i.AtlasReader.prototype = {
            index: 0,
            trim: function(t) {
                return t.replace(/^\s+|\s+$/g, "")
            },
            readLine: function() {
                return this.index >= this.lines.length ? null: this.lines[this.index++]
            },
            readValue: function() {
                var t = this.readLine(),
                e = t.indexOf(":");
                if ( - 1 == e) throw "Invalid line: " + t;
                return this.trim(t.substring(e + 1))
            },
            readTuple: function(t) {
                var e = this.readLine(),
                i = e.indexOf(":");
                if ( - 1 == i) throw "Invalid line: " + e;
                for (var s = 0,
                a = i + 1; 3 > s; s++) {
                    var r = e.indexOf(",", a);
                    if ( - 1 == r) break;
                    t[s] = this.trim(e.substr(a, r - a)),
                    a = r + 1
                }
                return t[s] = this.trim(e.substring(a)),
                s + 1
            }
        },
        i.AtlasAttachmentLoader = function(t) {
            this.atlas = t
        },
        i.AtlasAttachmentLoader.prototype = {
            newRegionAttachment: function(t, e, s) {
                var a = this.atlas.findRegion(s);
                if (!a) throw "Region not found in atlas: " + s + " (region attachment: " + e + ")";
                var r = new i.RegionAttachment(e);
                return r.rendererObject = a,
                r.setUVs(a.u, a.v, a.u2, a.v2, a.rotate),
                r.regionOffsetX = a.offsetX,
                r.regionOffsetY = a.offsetY,
                r.regionWidth = a.width,
                r.regionHeight = a.height,
                r.regionOriginalWidth = a.originalWidth,
                r.regionOriginalHeight = a.originalHeight,
                r
            },
            newMeshAttachment: function(t, e, s) {
                var a = this.atlas.findRegion(s);
                if (!a) throw "Region not found in atlas: " + s + " (mesh attachment: " + e + ")";
                var r = new i.MeshAttachment(e);
                return r.rendererObject = a,
                r.regionU = a.u,
                r.regionV = a.v,
                r.regionU2 = a.u2,
                r.regionV2 = a.v2,
                r.regionRotate = a.rotate,
                r.regionOffsetX = a.offsetX,
                r.regionOffsetY = a.offsetY,
                r.regionWidth = a.width,
                r.regionHeight = a.height,
                r.regionOriginalWidth = a.originalWidth,
                r.regionOriginalHeight = a.originalHeight,
                r
            },
            newSkinnedMeshAttachment: function(t, e, s) {
                var a = this.atlas.findRegion(s);
                if (!a) throw "Region not found in atlas: " + s + " (skinned mesh attachment: " + e + ")";
                var r = new i.SkinnedMeshAttachment(e);
                return r.rendererObject = a,
                r.regionU = a.u,
                r.regionV = a.v,
                r.regionU2 = a.u2,
                r.regionV2 = a.v2,
                r.regionRotate = a.rotate,
                r.regionOffsetX = a.offsetX,
                r.regionOffsetY = a.offsetY,
                r.regionWidth = a.width,
                r.regionHeight = a.height,
                r.regionOriginalWidth = a.originalWidth,
                r.regionOriginalHeight = a.originalHeight,
                r
            },
            newBoundingBoxAttachment: function(t, e) {
                return new i.BoundingBoxAttachment(e)
            }
        },
        i.SkeletonBounds = function() {
            this.polygonPool = [],
            this.polygons = [],
            this.boundingBoxes = []
        },
        i.SkeletonBounds.prototype = {
            minX: 0,
            minY: 0,
            maxX: 0,
            maxY: 0,
            update: function(t, e) {
                var s = t.slots,
                a = s.length,
                r = t.x,
                n = t.y,
                o = this.boundingBoxes,
                h = this.polygonPool,
                l = this.polygons;
                o.length = 0;
                for (var d = 0,
                u = l.length; u > d; d++) h.push(l[d]);
                l.length = 0;
                for (var d = 0; a > d; d++) {
                    var c = s[d],
                    m = c.attachment;
                    if (m.type == i.AttachmentType.boundingbox) {
                        o.push(m);
                        var p, g = h.length;
                        g > 0 ? (p = h[g - 1], h.splice(g - 1, 1)) : p = [],
                        l.push(p),
                        p.length = m.vertices.length,
                        m.computeWorldVertices(r, n, c.bone, p)
                    }
                }
                e && this.aabbCompute()
            },
            aabbCompute: function() {
                for (var t = this.polygons,
                e = Number.MAX_VALUE,
                i = Number.MAX_VALUE,
                s = Number.MIN_VALUE,
                a = Number.MIN_VALUE,
                r = 0,
                n = t.length; n > r; r++) for (var o = t[r], h = 0, l = o.length; l > h; h += 2) {
                    var d = o[h],
                    u = o[h + 1];
                    e = Math.min(e, d),
                    i = Math.min(i, u),
                    s = Math.max(s, d),
                    a = Math.max(a, u)
                }
                this.minX = e,
                this.minY = i,
                this.maxX = s,
                this.maxY = a
            },
            aabbContainsPoint: function(t, e) {
                return t >= this.minX && t <= this.maxX && e >= this.minY && e <= this.maxY
            },
            aabbIntersectsSegment: function(t, e, i, s) {
                var a = this.minX,
                r = this.minY,
                n = this.maxX,
                o = this.maxY;
                if (a >= t && a >= i || r >= e && r >= s || t >= n && i >= n || e >= o && s >= o) return ! 1;
                var h = (s - e) / (i - t),
                l = h * (a - t) + e;
                if (l > r && o > l) return ! 0;
                if (l = h * (n - t) + e, l > r && o > l) return ! 0;
                var d = (r - e) / h + t;
                return d > a && n > d ? !0 : (d = (o - e) / h + t, d > a && n > d ? !0 : !1)
            },
            aabbIntersectsSkeleton: function(t) {
                return this.minX < t.maxX && this.maxX > t.minX && this.minY < t.maxY && this.maxY > t.minY
            },
            containsPoint: function(t, e) {
                for (var i = this.polygons,
                s = 0,
                a = i.length; a > s; s++) if (this.polygonContainsPoint(i[s], t, e)) return this.boundingBoxes[s];
                return null
            },
            intersectsSegment: function(t, e, i, s) {
                for (var a = this.polygons,
                r = 0,
                n = a.length; n > r; r++) if (a[r].intersectsSegment(t, e, i, s)) return this.boundingBoxes[r];
                return null
            },
            polygonContainsPoint: function(t, e, i) {
                for (var s = t.length,
                a = s - 2,
                r = !1,
                n = 0; s > n; n += 2) {
                    var o = t[n + 1],
                    h = t[a + 1];
                    if (i > o && h >= i || i > h && o >= i) {
                        var l = t[n];
                        l + (i - o) / (h - o) * (t[a] - l) < e && (r = !r)
                    }
                    a = n
                }
                return r
            },
            polygonIntersectsSegment: function(t, e, i, s, a) {
                for (var r = t.length,
                n = e - s,
                o = i - a,
                h = e * a - i * s,
                l = t[r - 2], d = t[r - 1], u = 0; r > u; u += 2) {
                    var c = t[u],
                    m = t[u + 1],
                    p = l * m - d * c,
                    g = l - c,
                    f = d - m,
                    v = n * f - o * g,
                    x = (h * g - n * p) / v;
                    if ((x >= l && c >= x || x >= c && l >= x) && (x >= e && s >= x || x >= s && e >= x)) {
                        var y = (h * f - o * p) / v;
                        if ((y >= d && m >= y || y >= m && d >= y) && (y >= i && a >= y || y >= a && i >= y)) return ! 0
                    }
                    l = c,
                    d = m
                }
                return ! 1
            },
            getPolygon: function(t) {
                var e = this.boundingBoxes.indexOf(t);
                return - 1 == e ? null: this.polygons[e]
            },
            getWidth: function() {
                return this.maxX - this.minX
            },
            getHeight: function() {
                return this.maxY - this.minY
            }
        },
        i.Bone.yDown = !0,
        e.AnimCache = {},
        e.SpineTextureLoader = function(t, i) {
            e.EventTarget.call(this),
            this.basePath = t,
            this.crossorigin = i,
            this.loadingCount = 0
        },
        e.SpineTextureLoader.prototype = e.SpineTextureLoader,
        e.SpineTextureLoader.prototype.load = function(t, i) {
            if (t.rendererObject = e.BaseTexture.fromImage(this.basePath + "/" + i, this.crossorigin), !t.rendererObject.hasLoaded) {
                var s = this; ++s.loadingCount,
                t.rendererObject.addEventListener("loaded",
                function() {--s.loadingCount,
                    s.dispatchEvent({
                        type: "loadedBaseTexture",
                        content: s
                    })
                })
            }
        },
        e.SpineTextureLoader.prototype.unload = function(t) {
            t.destroy(!0)
        },
        e.Spine = function(t) {
            if (e.DisplayObjectContainer.call(this), this.spineData = e.AnimCache[t], !this.spineData) throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + t);
            this.skeleton = new i.Skeleton(this.spineData),
            this.skeleton.updateWorldTransform(),
            this.stateData = new i.AnimationStateData(this.spineData),
            this.state = new i.AnimationState(this.stateData),
            this.slotContainers = [];
            for (var s = 0,
            a = this.skeleton.slots.length; a > s; s++) {
                var r = this.skeleton.slots[s],
                n = r.attachment,
                o = new e.DisplayObjectContainer;
                if (this.slotContainers.push(o), this.addChild(o), n instanceof i.RegionAttachment) {
                    var h = n.rendererObject.name,
                    l = this.createSprite(r, n);
                    r.currentSprite = l,
                    r.currentSpriteName = h,
                    o.addChild(l)
                } else {
                    if (! (n instanceof i.MeshAttachment)) continue;
                    var d = this.createMesh(r, n);
                    r.currentMesh = d,
                    r.currentMeshName = n.name,
                    o.addChild(d)
                }
            }
            this.autoUpdate = !0
        },
        e.Spine.prototype = Object.create(e.DisplayObjectContainer.prototype),
        e.Spine.prototype.constructor = e.Spine,
        Object.defineProperty(e.Spine.prototype, "autoUpdate", {
            get: function() {
                return this.updateTransform === e.Spine.prototype.autoUpdateTransform
            },
            set: function(t) {
                this.updateTransform = t ? e.Spine.prototype.autoUpdateTransform: e.DisplayObjectContainer.prototype.updateTransform
            }
        }),
        e.Spine.prototype.update = function(t) {
            this.state.update(t),
            this.state.apply(this.skeleton),
            this.skeleton.updateWorldTransform();
            for (var s = this.skeleton.drawOrder,
            a = this.skeleton.slots,
            r = 0,
            n = s.length; n > r; r++) this.children[r] = this.slotContainers[s[r]];
            for (r = 0, n = a.length; n > r; r++) {
                var o = a[r],
                h = o.attachment,
                l = this.slotContainers[r];
                if (h) {
                    var d = h.type;
                    if (d === i.AttachmentType.region) {
                        if (h.rendererObject && (!o.currentSpriteName || o.currentSpriteName !== h.name)) {
                            var u = h.rendererObject.name;
                            if (void 0 !== o.currentSprite && (o.currentSprite.visible = !1), o.sprites = o.sprites || {},
                            void 0 !== o.sprites[u]) o.sprites[u].visible = !0;
                            else {
                                var c = this.createSprite(o, h);
                                l.addChild(c)
                            }
                            o.currentSprite = o.sprites[u],
                            o.currentSpriteName = u
                        }
                        var m = o.bone;
                        l.position.x = m.worldX + h.x * m.m00 + h.y * m.m01,
                        l.position.y = m.worldY + h.x * m.m10 + h.y * m.m11,
                        l.scale.x = m.worldScaleX,
                        l.scale.y = m.worldScaleY,
                        l.rotation = -(o.bone.worldRotation * i.degRad),
                        o.currentSprite.tint = e.rgb2hex([o.r, o.g, o.b])
                    } else {
                        if (d !== i.AttachmentType.skinnedmesh) {
                            l.visible = !1;
                            continue
                        }
                        if (!o.currentMeshName || o.currentMeshName !== h.name) {
                            var p = h.name;
                            if (void 0 !== o.currentMesh && (o.currentMesh.visible = !1), o.meshes = o.meshes || {},
                            void 0 !== o.meshes[p]) o.meshes[p].visible = !0;
                            else {
                                var g = this.createMesh(o, h);
                                l.addChild(g)
                            }
                            o.currentMesh = o.meshes[p],
                            o.currentMeshName = p
                        }
                        h.computeWorldVertices(o.bone.skeleton.x, o.bone.skeleton.y, o, o.currentMesh.vertices)
                    }
                    l.visible = !0,
                    l.alpha = o.a
                } else l.visible = !1
            }
        },
        e.Spine.prototype.autoUpdateTransform = function() {
            this.lastTime = this.lastTime || Date.now();
            var t = .001 * (Date.now() - this.lastTime);
            this.lastTime = Date.now(),
            this.update(t),
            e.DisplayObjectContainer.prototype.updateTransform.call(this)
        },
        e.Spine.prototype.createSprite = function(t, s) {
            var a = s.rendererObject,
            r = a.page.rendererObject,
            n = new e.Rectangle(a.x, a.y, a.rotate ? a.height: a.width, a.rotate ? a.width: a.height),
            o = new e.Texture(r, n),
            h = new e.Sprite(o),
            l = a.rotate ? .5 * Math.PI: 0;
            return h.scale.set(a.width / a.originalWidth * s.scaleX, a.height / a.originalHeight * s.scaleY),
            h.rotation = l - s.rotation * i.degRad,
            h.anchor.x = h.anchor.y = .5,
            h.alpha = s.a,
            t.sprites = t.sprites || {},
            t.sprites[a.name] = h,
            h
        },
        e.Spine.prototype.createMesh = function(t, i) {
            var s = i.rendererObject,
            a = s.page.rendererObject,
            r = new e.Texture(a),
            n = new e.Strip(r);
            return n.drawMode = e.Strip.DrawModes.TRIANGLES,
            n.canvasPadding = 1.5,
            n.vertices = new e.Float32Array(i.uvs.length),
            n.uvs = i.uvs,
            n.indices = i.triangles,
            n.alpha = i.a,
            t.meshes = t.meshes || {},
            t.meshes[i.name] = n,
            n
        },
        e.BaseTextureCache = {},
        e.BaseTextureCacheIdGenerator = 0,
        e.BaseTexture = function(t, i) {
            if (this.resolution = 1, this.width = 100, this.height = 100, this.scaleMode = i || e.scaleModes.DEFAULT, this.hasLoaded = !1, this.source = t, this._UID = e._UID++, this.premultipliedAlpha = !0, this._glTextures = [], this.mipmap = !1, this._dirty = [!0, !0, !0, !0], t) {
                if ((this.source.complete || this.source.getContext) && this.source.width && this.source.height) this.hasLoaded = !0,
                this.width = this.source.naturalWidth || this.source.width,
                this.height = this.source.naturalHeight || this.source.height,
                this.dirty();
                else {
                    var s = this;
                    this.source.onload = function() {
                        s.hasLoaded = !0,
                        s.width = s.source.naturalWidth || s.source.width,
                        s.height = s.source.naturalHeight || s.source.height,
                        s.dirty(),
                        s.dispatchEvent({
                            type: "loaded",
                            content: s
                        })
                    },
                    this.source.onerror = function() {
                        s.dispatchEvent({
                            type: "error",
                            content: s
                        })
                    }
                }
                this.imageUrl = null,
                this._powerOf2 = !1
            }
        },
        e.BaseTexture.prototype.constructor = e.BaseTexture,
        e.EventTarget.mixin(e.BaseTexture.prototype),
        e.BaseTexture.prototype.destroy = function() {
            this.imageUrl ? (delete e.BaseTextureCache[this.imageUrl], delete e.TextureCache[this.imageUrl], this.imageUrl = null, navigator.isCocoonJS || (this.source.src = "")) : this.source && this.source._pixiId && delete e.BaseTextureCache[this.source._pixiId],
            this.source = null,
            this.unloadFromGPU()
        },
        e.BaseTexture.prototype.updateSourceImage = function(t) {
            this.hasLoaded = !1,
            this.source.src = null,
            this.source.src = t
        },
        e.BaseTexture.prototype.dirty = function() {
            for (var t = 0; t < this._glTextures.length; t++) this._dirty[t] = !0
        },
        e.BaseTexture.prototype.unloadFromGPU = function() {
            this.dirty();
            for (var t = this._glTextures.length - 1; t >= 0; t--) {
                var i = this._glTextures[t],
                s = e.glContexts[t];
                s && i && s.deleteTexture(i)
            }
            this._glTextures.length = 0,
            this.dirty()
        },
        e.BaseTexture.fromImage = function(t, i, s) {
            var a = e.BaseTextureCache[t];
            if (void 0 === i && -1 === t.indexOf("data:") && (i = !0), !a) {
                var r = new Image;
                i && (r.crossOrigin = ""),
                r.src = t,
                a = new e.BaseTexture(r, s),
                a.imageUrl = t,
                e.BaseTextureCache[t] = a,
                -1 !== t.indexOf(e.RETINA_PREFIX + ".") && (a.resolution = 2)
            }
            return a
        },
        e.BaseTexture.fromCanvas = function(t, i) {
            t._pixiId || (t._pixiId = "canvas_" + e.TextureCacheIdGenerator++);
            var s = e.BaseTextureCache[t._pixiId];
            return s || (s = new e.BaseTexture(t, i), e.BaseTextureCache[t._pixiId] = s),
            s
        },
        e.TextureCache = {},
        e.FrameCache = {},
        e.TextureCacheIdGenerator = 0,
        e.Texture = function(t, i, s, a) {
            this.noFrame = !1,
            i || (this.noFrame = !0, i = new e.Rectangle(0, 0, 1, 1)),
            t instanceof e.Texture && (t = t.baseTexture),
            this.baseTexture = t,
            this.frame = i,
            this.trim = a,
            this.valid = !1,
            this.requiresUpdate = !1,
            this._uvs = null,
            this.width = 0,
            this.height = 0,
            this.crop = s || new e.Rectangle(0, 0, 1, 1),
            t.hasLoaded ? (this.noFrame && (i = new e.Rectangle(0, 0, t.width, t.height)), this.setFrame(i)) : t.addEventListener("loaded", this.onBaseTextureLoaded.bind(this))
        },
        e.Texture.prototype.constructor = e.Texture,
        e.EventTarget.mixin(e.Texture.prototype),
        e.Texture.prototype.onBaseTextureLoaded = function() {
            var t = this.baseTexture;
            t.removeEventListener("loaded", this.onLoaded),
            this.noFrame && (this.frame = new e.Rectangle(0, 0, t.width, t.height)),
            this.setFrame(this.frame),
            this.dispatchEvent({
                type: "update",
                content: this
            })
        },
        e.Texture.prototype.destroy = function(t) {
            t && this.baseTexture.destroy(),
            this.valid = !1
        },
        e.Texture.prototype.setFrame = function(t) {
            if (this.noFrame = !1, this.frame = t, this.width = t.width, this.height = t.height, this.crop.x = t.x, this.crop.y = t.y, this.crop.width = t.width, this.crop.height = t.height, !this.trim && (t.x + t.width > this.baseTexture.width || t.y + t.height > this.baseTexture.height)) throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this);
            this.valid = t && t.width && t.height && this.baseTexture.source && this.baseTexture.hasLoaded,
            this.trim && (this.width = this.trim.width, this.height = this.trim.height, this.frame.width = this.trim.width, this.frame.height = this.trim.height),
            this.valid && this._updateUvs()
        },
        e.Texture.prototype._updateUvs = function() {
            this._uvs || (this._uvs = new e.TextureUvs);
            var t = this.crop,
            i = this.baseTexture.width,
            s = this.baseTexture.height;
            this._uvs.x0 = t.x / i,
            this._uvs.y0 = t.y / s,
            this._uvs.x1 = (t.x + t.width) / i,
            this._uvs.y1 = t.y / s,
            this._uvs.x2 = (t.x + t.width) / i,
            this._uvs.y2 = (t.y + t.height) / s,
            this._uvs.x3 = t.x / i,
            this._uvs.y3 = (t.y + t.height) / s
        },
        e.Texture.fromImage = function(t, i, s) {
            var a = e.TextureCache[t];
            return a || (a = new e.Texture(e.BaseTexture.fromImage(t, i, s)), e.TextureCache[t] = a),
            a
        },
        e.Texture.fromFrame = function(t) {
            var i = e.TextureCache[t];
            if (!i) throw new Error('The frameId "' + t + '" does not exist in the texture cache ');
            return i
        },
        e.Texture.fromCanvas = function(t, i) {
            var s = e.BaseTexture.fromCanvas(t, i);
            return new e.Texture(s)
        },
        e.Texture.addTextureToCache = function(t, i) {
            e.TextureCache[i] = t
        },
        e.Texture.removeTextureFromCache = function(t) {
            var i = e.TextureCache[t];
            return delete e.TextureCache[t],
            delete e.BaseTextureCache[t],
            i
        },
        e.TextureUvs = function() {
            this.x0 = 0,
            this.y0 = 0,
            this.x1 = 0,
            this.y1 = 0,
            this.x2 = 0,
            this.y2 = 0,
            this.x3 = 0,
            this.y3 = 0
        },
        e.Texture.emptyTexture = new e.Texture(new e.BaseTexture),
        e.RenderTexture = function(t, i, s, a, r) {
            if (this.width = t || 100, this.height = i || 100, this.resolution = r || 1, this.frame = new e.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution), this.crop = new e.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution), this.baseTexture = new e.BaseTexture, this.baseTexture.width = this.width * this.resolution, this.baseTexture.height = this.height * this.resolution, this.baseTexture._glTextures = [], this.baseTexture.resolution = this.resolution, this.baseTexture.scaleMode = a || e.scaleModes.DEFAULT, this.baseTexture.hasLoaded = !0, e.Texture.call(this, this.baseTexture, new e.Rectangle(0, 0, this.width * this.resolution, this.height * this.resolution)), this.renderer = s || e.defaultRenderer, this.renderer.type === e.WEBGL_RENDERER) {
                var n = this.renderer.gl;
                this.baseTexture._dirty[n.id] = !1,
                this.textureBuffer = new e.FilterTexture(n, this.width, this.height, this.baseTexture.scaleMode),
                this.baseTexture._glTextures[n.id] = this.textureBuffer.texture,
                this.render = this.renderWebGL,
                this.projection = new e.Point(.5 * this.width, .5 * -this.height)
            } else this.render = this.renderCanvas,
            this.textureBuffer = new e.CanvasBuffer(this.width * this.resolution, this.height * this.resolution),
            this.baseTexture.source = this.textureBuffer.canvas;
            this.valid = !0,
            this._updateUvs()
        },
        e.RenderTexture.prototype = Object.create(e.Texture.prototype),
        e.RenderTexture.prototype.constructor = e.RenderTexture,
        e.RenderTexture.prototype.resize = function(t, i, s) { (t !== this.width || i !== this.height) && (this.valid = t > 0 && i > 0, this.width = t, this.height = i, this.frame.width = this.crop.width = t * this.resolution, this.frame.height = this.crop.height = i * this.resolution, s && (this.baseTexture.width = this.width * this.resolution, this.baseTexture.height = this.height * this.resolution), this.renderer.type === e.WEBGL_RENDERER && (this.projection.x = this.width / 2, this.projection.y = -this.height / 2), this.valid && this.textureBuffer.resize(this.width, this.height))
        },
        e.RenderTexture.prototype.clear = function() {
            this.valid && (this.renderer.type === e.WEBGL_RENDERER && this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER, this.textureBuffer.frameBuffer), this.textureBuffer.clear())
        },
        e.RenderTexture.prototype.renderWebGL = function(t, e, i) {
            if (this.valid) {
                var s = t.worldTransform;
                s.identity(),
                s.translate(0, 2 * this.projection.y),
                e && s.append(e),
                s.scale(1, -1),
                t.worldAlpha = 1;
                for (var a = t.children,
                r = 0,
                n = a.length; n > r; r++) a[r].updateTransform();
                var o = this.renderer.gl;
                o.viewport(0, 0, this.width * this.resolution, this.height * this.resolution),
                o.bindFramebuffer(o.FRAMEBUFFER, this.textureBuffer.frameBuffer),
                i && this.textureBuffer.clear(),
                this.renderer.spriteBatch.dirty = !0,
                this.renderer.renderDisplayObject(t, this.projection, this.textureBuffer.frameBuffer),
                this.renderer.spriteBatch.dirty = !0
            }
        },
        e.RenderTexture.prototype.renderCanvas = function(t, e, i) {
            if (this.valid) {
                var s = t.worldTransform;
                s.identity(),
                e && s.append(e),
                t.worldAlpha = 1;
                for (var a = t.children,
                r = 0,
                n = a.length; n > r; r++) a[r].updateTransform();
                i && this.textureBuffer.clear();
                var o = this.textureBuffer.context,
                h = this.renderer.resolution;
                this.renderer.resolution = this.resolution,
                this.renderer.renderDisplayObject(t, o),
                this.renderer.resolution = h
            }
        },
        e.RenderTexture.prototype.getImage = function() {
            var t = new Image;
            return t.src = this.getBase64(),
            t
        },
        e.RenderTexture.prototype.getBase64 = function() {
            return this.getCanvas().toDataURL()
        },
        e.RenderTexture.prototype.getCanvas = function() {
            if (this.renderer.type === e.WEBGL_RENDERER) {
                var t = this.renderer.gl,
                i = this.textureBuffer.width,
                s = this.textureBuffer.height,
                a = new Uint8Array(4 * i * s);
                t.bindFramebuffer(t.FRAMEBUFFER, this.textureBuffer.frameBuffer),
                t.readPixels(0, 0, i, s, t.RGBA, t.UNSIGNED_BYTE, a),
                t.bindFramebuffer(t.FRAMEBUFFER, null);
                var r = new e.CanvasBuffer(i, s),
                n = r.context.getImageData(0, 0, i, s);
                return n.data.set(a),
                r.context.putImageData(n, 0, 0),
                r.canvas
            }
            return this.textureBuffer.canvas
        },
        e.RenderTexture.tempMatrix = new e.Matrix,
        e.VideoTexture = function(t, i) {
            if (!t) throw new Error("No video source element specified."); (t.readyState === t.HAVE_ENOUGH_DATA || t.readyState === t.HAVE_FUTURE_DATA) && t.width && t.height && (t.complete = !0),
            e.BaseTexture.call(this, t, i),
            this.autoUpdate = !1,
            this.updateBound = this._onUpdate.bind(this),
            t.complete || (this._onCanPlay = this.onCanPlay.bind(this), t.addEventListener("canplay", this._onCanPlay), t.addEventListener("canplaythrough", this._onCanPlay), t.addEventListener("play", this.onPlayStart.bind(this)), t.addEventListener("pause", this.onPlayStop.bind(this)))
        },
        e.VideoTexture.prototype = Object.create(e.BaseTexture.prototype),
        e.VideoTexture.constructor = e.VideoTexture,
        e.VideoTexture.prototype._onUpdate = function() {
            this.autoUpdate && (window.requestAnimationFrame(this.updateBound), this.dirty())
        },
        e.VideoTexture.prototype.onPlayStart = function() {
            this.autoUpdate || (window.requestAnimationFrame(this.updateBound), this.autoUpdate = !0)
        },
        e.VideoTexture.prototype.onPlayStop = function() {
            this.autoUpdate = !1
        },
        e.VideoTexture.prototype.onCanPlay = function() {
            "canplaythrough" === event.type && (this.hasLoaded = !0, this.source && (this.source.removeEventListener("canplay", this._onCanPlay), this.source.removeEventListener("canplaythrough", this._onCanPlay), this.width = this.source.videoWidth, this.height = this.source.videoHeight, this.__loaded || (this.__loaded = !0, this.dispatchEvent({
                type: "loaded",
                content: this
            }))))
        },
        e.VideoTexture.prototype.destroy = function() {
            this.source && this.source._pixiId && (e.BaseTextureCache[this.source._pixiId] = null, delete e.BaseTextureCache[this.source._pixiId], this.source._pixiId = null, delete this.source._pixiId),
            e.BaseTexture.prototype.destroy.call(this)
        },
        e.VideoTexture.baseTextureFromVideo = function(t, i) {
            t._pixiId || (t._pixiId = "video_" + e.TextureCacheIdGenerator++);
            var s = e.BaseTextureCache[t._pixiId];
            return s || (s = new e.VideoTexture(t, i), e.BaseTextureCache[t._pixiId] = s),
            s
        },
        e.VideoTexture.textureFromVideo = function(t, i) {
            var s = e.VideoTexture.baseTextureFromVideo(t, i);
            return new e.Texture(s)
        },
        e.VideoTexture.fromUrl = function(t, i) {
            var s = document.createElement("video");
            return s.src = t,
            s.autoPlay = !0,
            s.play(),
            e.VideoTexture.textureFromVideo(s, i)
        },
        e.AssetLoader = function(t, i) {
            this.assetURLs = t,
            this.crossorigin = i,
            this.loadersByType = {
                jpg: e.ImageLoader,
                jpeg: e.ImageLoader,
                png: e.ImageLoader,
                gif: e.ImageLoader,
                webp: e.ImageLoader,
                json: e.JsonLoader,
                atlas: e.AtlasLoader,
                anim: e.SpineLoader,
                xml: e.BitmapFontLoader,
                fnt: e.BitmapFontLoader
            }
        },
        e.EventTarget.mixin(e.AssetLoader.prototype),
        e.AssetLoader.prototype.constructor = e.AssetLoader,
        e.AssetLoader.prototype._getDataType = function(t) {
            var e = "data:",
            i = t.slice(0, e.length).toLowerCase();
            if (i === e) {
                var s = t.slice(e.length),
                a = s.indexOf(",");
                if ( - 1 === a) return null;
                var r = s.slice(0, a).split(";")[0];
                return r && "text/plain" !== r.toLowerCase() ? r.split("/").pop().toLowerCase() : "txt"
            }
            return null
        },
        e.AssetLoader.prototype.load = function() {
            function t(t) {
                e.onAssetLoaded(t.data.content)
            }
            var e = this;
            this.loadCount = this.assetURLs.length;
            for (var i = 0; i < this.assetURLs.length; i++) {
                var s = this.assetURLs[i],
                a = this._getDataType(s);
                a || (a = s.split("?").shift().split(".").pop().toLowerCase());
                var r = this.loadersByType[a];
                if (!r) throw new Error(a + " is an unsupported file type");
                var n = new r(s, this.crossorigin);
                n.on("loaded", t),
                n.load()
            }
        },
        e.AssetLoader.prototype.onAssetLoaded = function(t) {
            this.loadCount--,
            this.emit("onProgress", {
                content: this,
                loader: t,
                loaded: this.assetURLs.length - this.loadCount,
                total: this.assetURLs.length
            }),
            this.onProgress && this.onProgress(t),
            this.loadCount || (this.emit("onComplete", {
                content: this
            }), this.onComplete && this.onComplete())
        },
        e.JsonLoader = function(t, e) {
            this.url = t,
            this.crossorigin = e,
            this.baseUrl = t.replace(/[^\/]*$/, ""),
            this.loaded = !1
        },
        e.JsonLoader.prototype.constructor = e.JsonLoader,
        e.EventTarget.mixin(e.JsonLoader.prototype),
        e.JsonLoader.prototype.load = function() {
            window.XMLHttpRequest ? this.ajaxRequest = new window.XMLHttpRequest: this.ajaxRequest = new window.ActiveXObject("Microsoft.XMLHTTP"),
            this.ajaxRequest.onreadystatechange = this.onReadyStateChanged.bind(this),
            this.ajaxRequest.open("GET", this.url, !0),
            this.ajaxRequest.send()
        },
        e.JsonLoader.prototype.onReadyStateChanged = function() {
            4 !== this.ajaxRequest.readyState || 200 !== this.ajaxRequest.status && -1 !== window.location.href.indexOf("http") || this.onJSONLoaded()
        },
        e.JsonLoader.prototype.onJSONLoaded = function() {
            if (!this.ajaxRequest.responseText) return void this.onError();
            if (this.json = JSON.parse(this.ajaxRequest.responseText), this.json.frames && this.json.meta && this.json.meta.image) {
                var t = this.json.meta.image; - 1 === t.indexOf("data:") && (t = this.baseUrl + t);
                var s = new e.ImageLoader(t, this.crossorigin),
                a = this.json.frames;
                this.texture = s.texture.baseTexture,
                s.addEventListener("loaded", this.onLoaded.bind(this));
                for (var r in a) {
                    var n = a[r].frame;
                    if (n) {
                        var o = new e.Rectangle(n.x, n.y, n.w, n.h),
                        h = o.clone(),
                        l = null;
                        if (a[r].trimmed) {
                            var d = a[r].sourceSize,
                            u = a[r].spriteSourceSize;
                            l = new e.Rectangle(u.x, u.y, d.w, d.h)
                        }
                        e.TextureCache[r] = new e.Texture(this.texture, o, h, l)
                    }
                }
                s.load()
            } else if (this.json.bones) if (e.AnimCache[this.url]) this.onLoaded();
            else {
                var c = this.url.substr(0, this.url.lastIndexOf(".")) + ".atlas",
                m = new e.JsonLoader(c, this.crossorigin),
                p = this;
                m.onJSONLoaded = function() {
                    if (!this.ajaxRequest.responseText) return void this.onError();
                    var t = new e.SpineTextureLoader(this.url.substring(0, this.url.lastIndexOf("/"))),
                    s = new i.Atlas(this.ajaxRequest.responseText, t),
                    a = new i.AtlasAttachmentLoader(s),
                    r = new i.SkeletonJson(a),
                    n = r.readSkeletonData(p.json);
                    e.AnimCache[p.url] = n,
                    p.spine = n,
                    p.spineAtlas = s,
                    p.spineAtlasLoader = m,
                    t.loadingCount > 0 ? t.addEventListener("loadedBaseTexture",
                    function(t) {
                        t.content.content.loadingCount <= 0 && p.onLoaded()
                    }) : p.onLoaded()
                },
                m.load()
            } else this.onLoaded()
        },
        e.JsonLoader.prototype.onLoaded = function() {
            this.loaded = !0,
            this.dispatchEvent({
                type: "loaded",
                content: this
            })
        },
        e.JsonLoader.prototype.onError = function() {
            this.dispatchEvent({
                type: "error",
                content: this
            })
        },
        e.AtlasLoader = function(t, e) {
            this.url = t,
            this.baseUrl = t.replace(/[^\/]*$/, ""),
            this.crossorigin = e,
            this.loaded = !1
        },
        e.AtlasLoader.constructor = e.AtlasLoader,
        e.EventTarget.mixin(e.AtlasLoader.prototype),
        e.AtlasLoader.prototype.load = function() {
            this.ajaxRequest = new e.AjaxRequest,
            this.ajaxRequest.onreadystatechange = this.onAtlasLoaded.bind(this),
            this.ajaxRequest.open("GET", this.url, !0),
            this.ajaxRequest.overrideMimeType && this.ajaxRequest.overrideMimeType("application/json"),
            this.ajaxRequest.send(null)
        },
        e.AtlasLoader.prototype.onAtlasLoaded = function() {
            if (4 === this.ajaxRequest.readyState) if (200 === this.ajaxRequest.status || -1 === window.location.href.indexOf("http")) {
                this.atlas = {
                    meta: {
                        image: []
                    },
                    frames: []
                };
                var t = this.ajaxRequest.responseText.split(/\r?\n/),
                i = -3,
                s = 0,
                a = null,
                r = !1,
                n = 0,
                o = 0,
                h = this.onLoaded.bind(this);
                for (n = 0; n < t.length; n++) if (t[n] = t[n].replace(/^\s+|\s+$/g, ""), "" === t[n] && (r = n + 1), t[n].length > 0) {
                    if (r === n) this.atlas.meta.image.push(t[n]),
                    s = this.atlas.meta.image.length - 1,
                    this.atlas.frames.push({}),
                    i = -3;
                    else if (i > 0) if (i % 7 === 1) null != a && (this.atlas.frames[s][a.name] = a),
                    a = {
                        name: t[n],
                        frame: {}
                    };
                    else {
                        var l = t[n].split(" ");
                        if (i % 7 === 3) a.frame.x = Number(l[1].replace(",", "")),
                        a.frame.y = Number(l[2]);
                        else if (i % 7 === 4) a.frame.w = Number(l[1].replace(",", "")),
                        a.frame.h = Number(l[2]);
                        else if (i % 7 === 5) {
                            var d = {
                                x: 0,
                                y: 0,
                                w: Number(l[1].replace(",", "")),
                                h: Number(l[2])
                            };
                            d.w > a.frame.w || d.h > a.frame.h ? (a.trimmed = !0, a.realSize = d) : a.trimmed = !1
                        }
                    }
                    i++
                }
                if (null != a && (this.atlas.frames[s][a.name] = a), this.atlas.meta.image.length > 0) {
                    for (this.images = [], o = 0; o < this.atlas.meta.image.length; o++) {
                        var u = this.baseUrl + this.atlas.meta.image[o],
                        c = this.atlas.frames[o];
                        this.images.push(new e.ImageLoader(u, this.crossorigin));
                        for (n in c) {
                            var m = c[n].frame;
                            m && (e.TextureCache[n] = new e.Texture(this.images[o].texture.baseTexture, {
                                x: m.x,
                                y: m.y,
                                width: m.w,
                                height: m.h
                            }), c[n].trimmed && (e.TextureCache[n].realSize = c[n].realSize, e.TextureCache[n].trim.x = 0, e.TextureCache[n].trim.y = 0))
                        }
                    }
                    for (this.currentImageId = 0, o = 0; o < this.images.length; o++) this.images[o].on("loaded", h);
                    this.images[this.currentImageId].load()
                } else this.onLoaded()
            } else this.onError()
        },
        e.AtlasLoader.prototype.onLoaded = function() {
            this.images.length - 1 > this.currentImageId ? (this.currentImageId++, this.images[this.currentImageId].load()) : (this.loaded = !0, this.emit("loaded", {
                content: this
            }))
        },
        e.AtlasLoader.prototype.onError = function() {
            this.emit("error", {
                content: this
            })
        },
        e.SpriteSheetLoader = function(t, e) {
            this.url = t,
            this.crossorigin = e,
            this.baseUrl = t.replace(/[^\/]*$/, ""),
            this.texture = null,
            this.frames = {}
        },
        e.SpriteSheetLoader.prototype.constructor = e.SpriteSheetLoader,
        e.EventTarget.mixin(e.SpriteSheetLoader.prototype),
        e.SpriteSheetLoader.prototype.load = function() {
            var t = this,
            i = new e.JsonLoader(this.url, this.crossorigin);
            i.on("loaded",
            function(e) {
                t.json = e.data.content.json,
                t.onLoaded()
            }),
            i.load()
        },
        e.SpriteSheetLoader.prototype.onLoaded = function() {
            this.emit("loaded", {
                content: this
            })
        },
        e.ImageLoader = function(t, i) {
            this.texture = e.Texture.fromImage(t, i),
            this.frames = []
        },
        e.ImageLoader.prototype.constructor = e.ImageLoader,
        e.EventTarget.mixin(e.ImageLoader.prototype),
        e.ImageLoader.prototype.load = function() {
            this.texture.baseTexture.hasLoaded ? this.onLoaded() : this.texture.baseTexture.on("loaded", this.onLoaded.bind(this))
        },
        e.ImageLoader.prototype.onLoaded = function() {
            this.emit("loaded", {
                content: this
            })
        },
        e.ImageLoader.prototype.loadFramedSpriteSheet = function(t, i, s) {
            if (this.frames = [], this.texture.baseTexture.hasLoaded) {
                s = s || this.texture.baseTexture.imageUrl;
                for (var a, r = Math.floor(this.texture.width / t), n = Math.floor(this.texture.height / i), o = 0, h = 0; n > h; h++) for (var l = 0; r > l; l++, o++) e.TextureCache[s + "-" + o] ? a = e.TextureCache[s + "-" + o] : (a = new e.Texture(this.texture, {
                    x: l * t,
                    y: h * i,
                    width: t,
                    height: i
                }), e.TextureCache[s + "-" + o] = a),
                this.frames.push(a);
                this.onLoaded()
            } else {
                var d = this;
                s = s || d.texture.baseTexture.imageUrl,
                this.texture.baseTexture.addEventListener("loaded",
                function() {
                    for (var a, r = Math.floor(d.texture.width / t), n = Math.floor(d.texture.height / i), o = 0, h = 0; n > h; h++) for (var l = 0; r > l; l++, o++) e.TextureCache[s + "-" + o] ? a = e.TextureCache[s + "-" + o] : (a = new e.Texture(d.texture, {
                        x: l * t,
                        y: h * i,
                        width: t,
                        height: i
                    }), e.TextureCache[s + "-" + o] = a),
                    d.frames.push(a);
                    d.onLoaded()
                })
            }
        },
        e.BitmapFontLoader = function(t, e) {
            this.url = t,
            this.crossorigin = e,
            this.baseUrl = t.replace(/[^\/]*$/, ""),
            this.texture = null
        },
        e.BitmapFontLoader.prototype.constructor = e.BitmapFontLoader,
        e.EventTarget.mixin(e.BitmapFontLoader.prototype),
        e.BitmapFontLoader.prototype.load = function() {
            this.ajaxRequest = new e.AjaxRequest,
            this.ajaxRequest.onreadystatechange = this.onXMLLoaded.bind(this),
            this.ajaxRequest.open("GET", this.url, !0),
            this.ajaxRequest.overrideMimeType && this.ajaxRequest.overrideMimeType("application/xml"),
            this.ajaxRequest.send(null)
        },
        e.BitmapFontLoader.prototype.onXMLLoaded = function() {
            if (4 === this.ajaxRequest.readyState && (200 === this.ajaxRequest.status || -1 === window.location.protocol.indexOf("http"))) {
                var t = this.ajaxRequest.responseXML;
                if (!t || /MSIE 9/i.test(navigator.userAgent) || navigator.isCocoonJS) if ("function" == typeof window.DOMParser) {
                    var i = new DOMParser;
                    t = i.parseFromString(this.ajaxRequest.responseText, "text/xml")
                } else {
                    var s = document.createElement("div");
                    s.innerHTML = this.ajaxRequest.responseText,
                    t = s
                }
                var a = this.baseUrl + t.getElementsByTagName("page")[0].getAttribute("file"),
                r = new e.ImageLoader(a, this.crossorigin);
                this.texture = r.texture.baseTexture;
                var n = {},
                o = t.getElementsByTagName("info")[0],
                h = t.getElementsByTagName("common")[0];
                n.font = o.getAttribute("face"),
                n.size = parseInt(o.getAttribute("size"), 10),
                n.lineHeight = parseInt(h.getAttribute("lineHeight"), 10),
                n.chars = {};
                for (var l = t.getElementsByTagName("char"), d = 0; d < l.length; d++) {
                    var u = parseInt(l[d].getAttribute("id"), 10),
                    c = new e.Rectangle(parseInt(l[d].getAttribute("x"), 10), parseInt(l[d].getAttribute("y"), 10), parseInt(l[d].getAttribute("width"), 10), parseInt(l[d].getAttribute("height"), 10));
                    n.chars[u] = {
                        xOffset: parseInt(l[d].getAttribute("xoffset"), 10),
                        yOffset: parseInt(l[d].getAttribute("yoffset"), 10),
                        xAdvance: parseInt(l[d].getAttribute("xadvance"), 10),
                        kerning: {},
                        texture: e.TextureCache[u] = new e.Texture(this.texture, c)
                    }
                }
                var m = t.getElementsByTagName("kerning");
                for (d = 0; d < m.length; d++) {
                    var p = parseInt(m[d].getAttribute("first"), 10),
                    g = parseInt(m[d].getAttribute("second"), 10),
                    f = parseInt(m[d].getAttribute("amount"), 10);
                    n.chars[g].kerning[p] = f
                }
                e.BitmapText.fonts[n.font] = n,
                r.addEventListener("loaded", this.onLoaded.bind(this)),
                r.load()
            }
        },
        e.BitmapFontLoader.prototype.onLoaded = function() {
            this.emit("loaded", {
                content: this
            })
        },
        e.SpineLoader = function(t, e) {
            this.url = t,
            this.crossorigin = e,
            this.loaded = !1
        },
        e.SpineLoader.prototype.constructor = e.SpineLoader,
        e.EventTarget.mixin(e.SpineLoader.prototype),
        e.SpineLoader.prototype.load = function() {
            var t = this,
            i = new e.JsonLoader(this.url, this.crossorigin);
            i.on("loaded",
            function(e) {
                t.json = e.data.content.json,
                t.onLoaded()
            }),
            i.load()
        },
        e.SpineLoader.prototype.onLoaded = function() {
            this.loaded = !0,
            this.emit("loaded", {
                content: this
            })
        },
        e.AbstractFilter = function(t, e) {
            this.passes = [this],
            this.shaders = [],
            this.dirty = !0,
            this.padding = 0,
            this.uniforms = e || {},
            this.fragmentSrc = t || []
        },
        e.AbstractFilter.prototype.constructor = e.AbstractFilter,
        e.AbstractFilter.prototype.syncUniforms = function() {
            for (var t = 0,
            e = this.shaders.length; e > t; t++) this.shaders[t].dirty = !0
        },
        e.AlphaMaskFilter = function(t) {
            e.AbstractFilter.call(this),
            this.passes = [this],
            t.baseTexture._powerOf2 = !0,
            this.uniforms = {
                mask: {
                    type: "sampler2D",
                    value: t
                },
                mapDimensions: {
                    type: "2f",
                    value: {
                        x: 1,
                        y: 5112
                    }
                },
                dimensions: {
                    type: "4fv",
                    value: [0, 0, 0, 0]
                }
            },
            t.baseTexture.hasLoaded ? (this.uniforms.mapDimensions.value.x = t.width, this.uniforms.mapDimensions.value.y = t.height) : (this.boundLoadedFunction = this.onTextureLoaded.bind(this), t.baseTexture.on("loaded", this.boundLoadedFunction)),
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D mask;", "uniform sampler2D uSampler;", "uniform vec2 offset;", "uniform vec4 dimensions;", "uniform vec2 mapDimensions;", "void main(void) {", "   vec2 mapCords = vTextureCoord.xy;", "   mapCords += (dimensions.zw + offset)/ dimensions.xy ;", "   mapCords.y *= -1.0;", "   mapCords.y += 1.0;", "   mapCords *= dimensions.xy / mapDimensions;", "   vec4 original =  texture2D(uSampler, vTextureCoord);", "   float maskAlpha =  texture2D(mask, mapCords).r;", "   original *= maskAlpha;", "   gl_FragColor =  original;", "}"];
        },
        e.AlphaMaskFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.AlphaMaskFilter.prototype.constructor = e.AlphaMaskFilter,
        e.AlphaMaskFilter.prototype.onTextureLoaded = function() {
            this.uniforms.mapDimensions.value.x = this.uniforms.mask.value.width,
            this.uniforms.mapDimensions.value.y = this.uniforms.mask.value.height,
            this.uniforms.mask.value.baseTexture.off("loaded", this.boundLoadedFunction)
        },
        Object.defineProperty(e.AlphaMaskFilter.prototype, "map", {
            get: function() {
                return this.uniforms.mask.value
            },
            set: function(t) {
                this.uniforms.mask.value = t
            }
        }),
        e.ColorMatrixFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                matrix: {
                    type: "mat4",
                    value: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float invert;", "uniform mat4 matrix;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord) * matrix;", "}"]
        },
        e.ColorMatrixFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.ColorMatrixFilter.prototype.constructor = e.ColorMatrixFilter,
        Object.defineProperty(e.ColorMatrixFilter.prototype, "matrix", {
            get: function() {
                return this.uniforms.matrix.value
            },
            set: function(t) {
                this.uniforms.matrix.value = t
            }
        }),
        e.GrayFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                gray: {
                    type: "1f",
                    value: 1
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "uniform float gray;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord);", "   gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(0.2126*gl_FragColor.r + 0.7152*gl_FragColor.g + 0.0722*gl_FragColor.b), gray);", "}"]
        },
        e.GrayFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.GrayFilter.prototype.constructor = e.GrayFilter,
        Object.defineProperty(e.GrayFilter.prototype, "gray", {
            get: function() {
                return this.uniforms.gray.value
            },
            set: function(t) {
                this.uniforms.gray.value = t
            }
        }),
        e.DisplacementFilter = function(t) {
            e.AbstractFilter.call(this),
            this.passes = [this],
            t.baseTexture._powerOf2 = !0,
            this.uniforms = {
                displacementMap: {
                    type: "sampler2D",
                    value: t
                },
                scale: {
                    type: "2f",
                    value: {
                        x: 30,
                        y: 30
                    }
                },
                offset: {
                    type: "2f",
                    value: {
                        x: 0,
                        y: 0
                    }
                },
                mapDimensions: {
                    type: "2f",
                    value: {
                        x: 1,
                        y: 5112
                    }
                },
                dimensions: {
                    type: "4fv",
                    value: [0, 0, 0, 0]
                }
            },
            t.baseTexture.hasLoaded ? (this.uniforms.mapDimensions.value.x = t.width, this.uniforms.mapDimensions.value.y = t.height) : (this.boundLoadedFunction = this.onTextureLoaded.bind(this), t.baseTexture.on("loaded", this.boundLoadedFunction)),
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D displacementMap;", "uniform sampler2D uSampler;", "uniform vec2 scale;", "uniform vec2 offset;", "uniform vec4 dimensions;", "uniform vec2 mapDimensions;", "void main(void) {", "   vec2 mapCords = vTextureCoord.xy;", "   mapCords += (dimensions.zw + offset)/ dimensions.xy ;", "   mapCords.y *= -1.0;", "   mapCords.y += 1.0;", "   vec2 matSample = texture2D(displacementMap, mapCords).xy;", "   matSample -= 0.5;", "   matSample *= scale;", "   matSample /= mapDimensions;", "   gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + matSample.x, vTextureCoord.y + matSample.y));", "   gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb, 1.0);", "   vec2 cord = vTextureCoord;", "}"]
        },
        e.DisplacementFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.DisplacementFilter.prototype.constructor = e.DisplacementFilter,
        e.DisplacementFilter.prototype.onTextureLoaded = function() {
            this.uniforms.mapDimensions.value.x = this.uniforms.displacementMap.value.width,
            this.uniforms.mapDimensions.value.y = this.uniforms.displacementMap.value.height,
            this.uniforms.displacementMap.value.baseTexture.off("loaded", this.boundLoadedFunction)
        },
        Object.defineProperty(e.DisplacementFilter.prototype, "map", {
            get: function() {
                return this.uniforms.displacementMap.value
            },
            set: function(t) {
                this.uniforms.displacementMap.value = t
            }
        }),
        Object.defineProperty(e.DisplacementFilter.prototype, "scale", {
            get: function() {
                return this.uniforms.scale.value
            },
            set: function(t) {
                this.uniforms.scale.value = t
            }
        }),
        Object.defineProperty(e.DisplacementFilter.prototype, "offset", {
            get: function() {
                return this.uniforms.offset.value
            },
            set: function(t) {
                this.uniforms.offset.value = t
            }
        }),
        e.PixelateFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                invert: {
                    type: "1f",
                    value: 0
                },
                dimensions: {
                    type: "4fv",
                    value: new e.Float32Array([1e4, 100, 10, 10])
                },
                pixelSize: {
                    type: "2f",
                    value: {
                        x: 10,
                        y: 10
                    }
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec2 testDim;", "uniform vec4 dimensions;", "uniform vec2 pixelSize;", "uniform sampler2D uSampler;", "void main(void) {", "   vec2 coord = vTextureCoord;", "   vec2 size = dimensions.xy/pixelSize;", "   vec2 color = floor( ( vTextureCoord * size ) ) / size + pixelSize/dimensions.xy * 0.5;", "   gl_FragColor = texture2D(uSampler, color);", "}"]
        },
        e.PixelateFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.PixelateFilter.prototype.constructor = e.PixelateFilter,
        Object.defineProperty(e.PixelateFilter.prototype, "size", {
            get: function() {
                return this.uniforms.pixelSize.value
            },
            set: function(t) {
                this.dirty = !0,
                this.uniforms.pixelSize.value = t
            }
        }),
        e.BlurXFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                blur: {
                    type: "1f",
                    value: 1 / 512
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float blur;", "uniform sampler2D uSampler;", "void main(void) {", "   vec4 sum = vec4(0.0);", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - 4.0*blur, vTextureCoord.y)) * 0.05;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - 3.0*blur, vTextureCoord.y)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - 2.0*blur, vTextureCoord.y)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - blur, vTextureCoord.y)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + blur, vTextureCoord.y)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + 2.0*blur, vTextureCoord.y)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + 3.0*blur, vTextureCoord.y)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + 4.0*blur, vTextureCoord.y)) * 0.05;", "   gl_FragColor = sum;", "}"]
        },
        e.BlurXFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.BlurXFilter.prototype.constructor = e.BlurXFilter,
        Object.defineProperty(e.BlurXFilter.prototype, "blur", {
            get: function() {
                return this.uniforms.blur.value / (1 / 7e3)
            },
            set: function(t) {
                this.dirty = !0,
                this.uniforms.blur.value = 1 / 7e3 * t
            }
        }),
        e.BlurYFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                blur: {
                    type: "1f",
                    value: 1 / 512
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float blur;", "uniform sampler2D uSampler;", "void main(void) {", "   vec4 sum = vec4(0.0);", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 4.0*blur)) * 0.05;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 3.0*blur)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 2.0*blur)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - blur)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + blur)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 2.0*blur)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 3.0*blur)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 4.0*blur)) * 0.05;", "   gl_FragColor = sum;", "}"]
        },
        e.BlurYFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.BlurYFilter.prototype.constructor = e.BlurYFilter,
        Object.defineProperty(e.BlurYFilter.prototype, "blur", {
            get: function() {
                return this.uniforms.blur.value / (1 / 7e3)
            },
            set: function(t) {
                this.uniforms.blur.value = 1 / 7e3 * t
            }
        }),
        e.BlurFilter = function() {
            this.blurXFilter = new e.BlurXFilter,
            this.blurYFilter = new e.BlurYFilter,
            this.passes = [this.blurXFilter, this.blurYFilter]
        },
        e.BlurFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.BlurFilter.prototype.constructor = e.BlurFilter,
        Object.defineProperty(e.BlurFilter.prototype, "blur", {
            get: function() {
                return this.blurXFilter.blur
            },
            set: function(t) {
                this.blurXFilter.blur = this.blurYFilter.blur = t
            }
        }),
        Object.defineProperty(e.BlurFilter.prototype, "blurX", {
            get: function() {
                return this.blurXFilter.blur
            },
            set: function(t) {
                this.blurXFilter.blur = t
            }
        }),
        Object.defineProperty(e.BlurFilter.prototype, "blurY", {
            get: function() {
                return this.blurYFilter.blur
            },
            set: function(t) {
                this.blurYFilter.blur = t
            }
        }),
        e.InvertFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                invert: {
                    type: "1f",
                    value: 1
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float invert;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord);", "   gl_FragColor.rgb = mix( (vec3(1)-gl_FragColor.rgb) * gl_FragColor.a, gl_FragColor.rgb, 1.0 - invert);", "}"]
        },
        e.InvertFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.InvertFilter.prototype.constructor = e.InvertFilter,
        Object.defineProperty(e.InvertFilter.prototype, "invert", {
            get: function() {
                return this.uniforms.invert.value
            },
            set: function(t) {
                this.uniforms.invert.value = t
            }
        }),
        e.SepiaFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                sepia: {
                    type: "1f",
                    value: 1
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float sepia;", "uniform sampler2D uSampler;", "const mat3 sepiaMatrix = mat3(0.3588, 0.7044, 0.1368, 0.2990, 0.5870, 0.1140, 0.2392, 0.4696, 0.0912);", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord);", "   gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb * sepiaMatrix, sepia);", "}"]
        },
        e.SepiaFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.SepiaFilter.prototype.constructor = e.SepiaFilter,
        Object.defineProperty(e.SepiaFilter.prototype, "sepia", {
            get: function() {
                return this.uniforms.sepia.value
            },
            set: function(t) {
                this.uniforms.sepia.value = t
            }
        }),
        e.TwistFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                radius: {
                    type: "1f",
                    value: .5
                },
                angle: {
                    type: "1f",
                    value: 5
                },
                offset: {
                    type: "2f",
                    value: {
                        x: .5,
                        y: .5
                    }
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec4 dimensions;", "uniform sampler2D uSampler;", "uniform float radius;", "uniform float angle;", "uniform vec2 offset;", "void main(void) {", "   vec2 coord = vTextureCoord - offset;", "   float distance = length(coord);", "   if (distance < radius) {", "       float ratio = (radius - distance) / radius;", "       float angleMod = ratio * ratio * angle;", "       float s = sin(angleMod);", "       float c = cos(angleMod);", "       coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);", "   }", "   gl_FragColor = texture2D(uSampler, coord+offset);", "}"]
        },
        e.TwistFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.TwistFilter.prototype.constructor = e.TwistFilter,
        Object.defineProperty(e.TwistFilter.prototype, "offset", {
            get: function() {
                return this.uniforms.offset.value
            },
            set: function(t) {
                this.dirty = !0,
                this.uniforms.offset.value = t
            }
        }),
        Object.defineProperty(e.TwistFilter.prototype, "radius", {
            get: function() {
                return this.uniforms.radius.value
            },
            set: function(t) {
                this.dirty = !0,
                this.uniforms.radius.value = t
            }
        }),
        Object.defineProperty(e.TwistFilter.prototype, "angle", {
            get: function() {
                return this.uniforms.angle.value
            },
            set: function(t) {
                this.dirty = !0,
                this.uniforms.angle.value = t
            }
        }),
        e.ColorStepFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                step: {
                    type: "1f",
                    value: 5
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "uniform float step;", "void main(void) {", "   vec4 color = texture2D(uSampler, vTextureCoord);", "   color = floor(color * step) / step;", "   gl_FragColor = color;", "}"]
        },
        e.ColorStepFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.ColorStepFilter.prototype.constructor = e.ColorStepFilter,
        Object.defineProperty(e.ColorStepFilter.prototype, "step", {
            get: function() {
                return this.uniforms.step.value
            },
            set: function(t) {
                this.uniforms.step.value = t
            }
        }),
        e.DotScreenFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                scale: {
                    type: "1f",
                    value: 1
                },
                angle: {
                    type: "1f",
                    value: 5
                },
                dimensions: {
                    type: "4fv",
                    value: [0, 0, 0, 0]
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec4 dimensions;", "uniform sampler2D uSampler;", "uniform float angle;", "uniform float scale;", "float pattern() {", "   float s = sin(angle), c = cos(angle);", "   vec2 tex = vTextureCoord * dimensions.xy;", "   vec2 point = vec2(", "       c * tex.x - s * tex.y,", "       s * tex.x + c * tex.y", "   ) * scale;", "   return (sin(point.x) * sin(point.y)) * 4.0;", "}", "void main() {", "   vec4 color = texture2D(uSampler, vTextureCoord);", "   float average = (color.r + color.g + color.b) / 3.0;", "   gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);", "}"]
        },
        e.DotScreenFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.DotScreenFilter.prototype.constructor = e.DotScreenFilter,
        Object.defineProperty(e.DotScreenFilter.prototype, "scale", {
            get: function() {
                return this.uniforms.scale.value
            },
            set: function(t) {
                this.dirty = !0,
                this.uniforms.scale.value = t
            }
        }),
        Object.defineProperty(e.DotScreenFilter.prototype, "angle", {
            get: function() {
                return this.uniforms.angle.value
            },
            set: function(t) {
                this.dirty = !0,
                this.uniforms.angle.value = t
            }
        }),
        e.CrossHatchFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                blur: {
                    type: "1f",
                    value: 1 / 512
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float blur;", "uniform sampler2D uSampler;", "void main(void) {", "    float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);", "    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);", "    if (lum < 1.00) {", "        if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "    if (lum < 0.75) {", "        if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "    if (lum < 0.50) {", "        if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "    if (lum < 0.3) {", "        if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "}"]
        },
        e.CrossHatchFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.CrossHatchFilter.prototype.constructor = e.CrossHatchFilter,
        Object.defineProperty(e.CrossHatchFilter.prototype, "blur", {
            get: function() {
                return this.uniforms.blur.value / (1 / 7e3)
            },
            set: function(t) {
                this.uniforms.blur.value = 1 / 7e3 * t
            }
        }),
        e.RGBSplitFilter = function() {
            e.AbstractFilter.call(this),
            this.passes = [this],
            this.uniforms = {
                red: {
                    type: "2f",
                    value: {
                        x: 20,
                        y: 20
                    }
                },
                green: {
                    type: "2f",
                    value: {
                        x: -20,
                        y: 20
                    }
                },
                blue: {
                    type: "2f",
                    value: {
                        x: 20,
                        y: -20
                    }
                },
                dimensions: {
                    type: "4fv",
                    value: [0, 0, 0, 0]
                }
            },
            this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec2 red;", "uniform vec2 green;", "uniform vec2 blue;", "uniform vec4 dimensions;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor.r = texture2D(uSampler, vTextureCoord + red/dimensions.xy).r;", "   gl_FragColor.g = texture2D(uSampler, vTextureCoord + green/dimensions.xy).g;", "   gl_FragColor.b = texture2D(uSampler, vTextureCoord + blue/dimensions.xy).b;", "   gl_FragColor.a = texture2D(uSampler, vTextureCoord).a;", "}"]
        },
        e.RGBSplitFilter.prototype = Object.create(e.AbstractFilter.prototype),
        e.RGBSplitFilter.prototype.constructor = e.RGBSplitFilter,
        Object.defineProperty(e.RGBSplitFilter.prototype, "red", {
            get: function() {
                return this.uniforms.red.value
            },
            set: function(t) {
                this.uniforms.red.value = t
            }
        }),
        Object.defineProperty(e.RGBSplitFilter.prototype, "green", {
            get: function() {
                return this.uniforms.green.value
            },
            set: function(t) {
                this.uniforms.green.value = t
            }
        }),
        Object.defineProperty(e.RGBSplitFilter.prototype, "blue", {
            get: function() {
                return this.uniforms.blue.value
            },
            set: function(t) {
                this.uniforms.blue.value = t
            }
        }),
        "undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = e), exports.PIXI = e) : "undefined" != typeof define && define.amd ? define(e) : t.PIXI = e
    }).call(this)
}),
game.module("engine.pool").body(function() {
    game.createClass("Pool", {
        create: function(t) {
            return this[t] ? !1 : (this[t] = [], !0)
        },
        get: function(t) {
            return this[t] && 0 !== this[t].length ? this[t].pop() : !1
        },
        put: function(t, e) {
            return this[t] ? (this[t].push(e), !0) : !1
        }
    })
}),
game.module("engine.renderer").require("engine.pixi", "engine.geometry").body(function() {
    game.PIXI.dontSayHello = !0,
    game.PIXI.RETINA_PREFIX = !1,
    game.autoDetectRenderer = game.PIXI.autoDetectRenderer,
    game.createClass("AnimationData", {
        loop: !0,
        onComplete: null,
        random: !1,
        reverse: !1,
        speed: 5,
        frames: null,
        staticInit: function(t, e) {
            this.frames = t,
            game.merge(this, e)
        }
    }),
    game.Animation = function(t, e, i) {
        if (this.anims = {},
        this.currentAnim = "default", this.currentFrame = 0, this.playing = !1, this._frameTime = 0, this.textures = t, "string" == typeof this.textures && -1 !== this.textures.indexOf("json")) {
            var s = game.getJSON(this.textures);
            this.textures = [];
            for (var a in s.frames) this.textures.push(a)
        }
        for (var r = [], n = 0; n < this.textures.length; n++) {
            var o = this.textures[n];
            o instanceof game.Texture || (o = game.Texture.fromAsset(o)),
            r.push(o)
        }
        this.textures = r,
        this.addAnim("default"),
        game.PIXI.Sprite.call(this, this.textures[0])
    },
    game.Animation.prototype = Object.create(game.PIXI.Sprite.prototype),
    game.Animation.prototype.constructor = game.Animation,
    game.Animation.prototype.addAnim = function(t, e, i) {
        if (!e) for (var e = [], s = 0; s < this.textures.length; s++) e.push(s);
        var a = new game.AnimationData(e, i);
        return this.anims[t] = a,
        this
    },
    game.Animation.prototype.play = function(t, e) {
        t = t || this.currentAnim;
        var i = this.anims[t];
        if (i) return this.playing = !0,
        this.currentAnim = t,
        "number" != typeof e && i.reverse && (e = i.frames.length - 1),
        this.gotoFrame(e || 0),
        this
    },
    game.Animation.prototype.stop = function(t) {
        return this.playing = !1,
        "number" == typeof t && this.gotoFrame(t),
        this
    },
    game.Animation.prototype.gotoFrame = function(t) {
        var e = this.anims[this.currentAnim];
        if (e) return this.currentFrame = t,
        this._frameTime = 0,
        this.setTexture(this.textures[e.frames[t]]),
        this
    },
    game.Animation.prototype.updateAnimation = function() {
        var t = this.anims[this.currentAnim];
        if (this.playing && (this._frameTime += t.speed * game.system.delta), this._frameTime >= 1) {
            if (this._frameTime = 0, t.random && t.frames.length > 1) {
                for (var e = this.currentFrame; e === this.currentFrame;) var e = Math.round(Math.random(0, t.frames.length - 1));
                return this.currentFrame = e,
                void this.setTexture(this.textures[t.frames[e]])
            }
            var e = this.currentFrame + (t.reverse ? -1 : 1);
            e >= t.frames.length ? t.loop ? (this.currentFrame = 0, this.setTexture(this.textures[t.frames[0]])) : (this.playing = !1, t.onComplete && t.onComplete()) : 0 > e ? t.loop ? (this.currentFrame = t.frames.length - 1, this.setTexture(this.textures[t.frames.last()])) : (this.playing = !1, t.onComplete && t.onComplete()) : (this.currentFrame = e, this.setTexture(this.textures[t.frames[e]]))
        }
    },
    game.Animation.prototype.updateTransform = function() {
        this.currentAnim && this.updateAnimation(),
        game.PIXI.Sprite.prototype.updateTransform.call(this)
    },
    game.Animation.fromFrames = function(t) {
        var e = [];
        for (var i in game.Texture.cache) 0 === i.indexOf(t) && e.push(game.Texture.cache[i]);
        return e.length > 0 ? new game.Animation(e) : void 0
    },
    game.AssetLoader = game.PIXI.AssetLoader,
    game.blendModes = game.PIXI.blendModes,
    game.BaseTexture = game.PIXI.BaseTexture,
    game.BitmapText = game.PIXI.BitmapText,
    game.CanvasRenderer = game.PIXI.CanvasRenderer,
    game.Container = game.PIXI.DisplayObjectContainer,
    game.DisplayObject = game.PIXI.DisplayObject,
    game.DisplayObject.prototype.remove = function() {
        this.parent && this.parent.removeChild(this)
    },
    game.DisplayObject.prototype.addTo = function(t) {
        return t.addChild(this),
        this
    },
    game.Graphics = game.PIXI.Graphics,
    game.HitCircle = game.PIXI.Circle,
    game.HitEllipse = game.PIXI.Ellipse,
    game.HitPolygon = game.PIXI.Polygon,
    game.HitRectangle = game.PIXI.Rectangle,
    game.Point = game.PIXI.Point = game.Vector,
    game.RenderTexture = game.PIXI.RenderTexture,
    game.Spine = function(t, e) {
        game.PIXI.Spine.call(this, game.paths[t] || t),
        game.merge(this, e)
    },
    game.Spine.prototype = Object.create(game.PIXI.Spine.prototype),
    game.Spine.prototype.constructor = game.Spine,
    game.Spine.prototype.play = function(t, e, i) {
        i ? this.state.addAnimationByName(t, !!e) : this.state.setAnimationByName(t, !!e)
    },
    game.Spine.prototype.mix = function(t, e, i) {
        this.stateData.setMixByName(t, e, i / 100)
    },
    game.Sprite = function(t, e, i, s) {
        "string" == typeof t && (t = game.paths[t] || t, t = game.Texture.fromFrame(t)),
        game.PIXI.Sprite.call(this, t),
        game.merge(this, s),
        this.position.set(e * game.scale, i * game.scale),
        game.device.mobile && !this.tap && this.click && (this.tap = this.click),
        game.device.mobile && !this.touchmove && this.mousemove && (this.touchmove = this.mousemove),
        game.device.mobile && !this.touchstart && this.mousedown && (this.touchstart = this.mousedown),
        game.device.mobile && !this.touchend && this.mouseup && (this.touchend = this.mouseup),
        game.device.mobile && !this.touchendoutside && this.mouseupoutside && (this.touchendoutside = this.mouseupoutside)
    },
    game.Sprite.prototype = Object.create(game.PIXI.Sprite.prototype),
    game.Sprite.prototype.constructor = game.Sprite,
    game.Sprite.prototype.setTexture = function(t) {
        "string" == typeof t && (t = game.paths[t] || t, t = game.Texture.fromFrame(t)),
        game.PIXI.Sprite.prototype.setTexture.call(this, t)
    },
    game.Sprite.prototype.crop = function(t, e, i, s) {
        var a = new game.PIXI.Texture(this.texture, new game.HitRectangle(t, e, i, s));
        return this.setTexture(a),
        this
    },
    game.Sprite.prototype.center = function(t, e) {
        return this.position.x = game.system.width / 2 - this.width / 2 + this.width * this.anchor.x,
        this.position.y = game.system.height / 2 - this.height / 2 + this.height * this.anchor.y,
        this.position.x += t || 0,
        this.position.y += e || 0,
        this
    },
    game.Sprite.fromFrame = game.PIXI.Sprite.fromFrame,
    game.Sprite.fromImage = game.PIXI.Sprite.fromImage,
    game.Stage = game.PIXI.Stage,
    game.Text = game.PIXI.Text,
    game.Texture = game.PIXI.Texture,
    game.Texture.fromAsset = function(t) {
        var e = game.paths[t] || t,
        i = game.PIXI.TextureCache[e];
        return i || (i = game.Texture.fromFrame(e)),
        i
    },
    game.TextureCache = game.PIXI.TextureCache,
    game.TilingSprite = function(t, e, i, s) {
        this.speed = new game.Point,
        t = game.paths[t] || t;
        var a = t instanceof game.Texture ? t: t instanceof game.RenderTexture ? t: game.Texture.fromFrame(this.path || t);
        game.PIXI.TilingSprite.call(this, a, e || a.width, i || a.height),
        game.merge(this, s)
    },
    game.TilingSprite.prototype = Object.create(game.PIXI.TilingSprite.prototype),
    game.TilingSprite.prototype.constructor = game.TilingSprite,
    game.TilingSprite.prototype.update = function() {
        this.tilePosition.x += this.speed.x * game.system.delta,
        this.tilePosition.y += this.speed.y * game.system.delta
    },
    game.createClass("SpriteSheet", {
        textures: [],
        frames: 0,
        width: 0,
        height: 0,
        texture: null,
        _sx: 0,
        _sy: 0,
        init: function(t, e, i) {
            this.width = e,
            this.height = i;
            var s = game.TextureCache[game.paths[t]];
            this.sx = Math.floor(s.width / this.width),
            this.sy = Math.floor(s.height / this.height),
            this.frames = this.sx * this.sy;
            for (var a = 0; a < this.frames; a++) {
                var r = a % this.sx * this.width,
                n = Math.floor(a / this.sx) * this.height,
                o = new game.Texture(s, new game.HitRectangle(r, n, this.width, this.height));
                this.textures.push(o)
            }
        },
        frame: function(t) {
            return t = t.limit(0, this.frames - 1),
            new game.Sprite(this.textures[t])
        },
        anim: function(t, e, i) {
            e = e || 0,
            t = t || this.frames;
            var s = [];
            if (t.length > 0) for (var a = 0; a < t.length; a++) s.push(this.textures[e + t[a]]);
            else for (var a = 0; t > a; a++) s.push(this.textures[e + a]);
            return i ? s: new game.Animation(s)
        }
    }),
    game.createClass("Video", {
        loop: !1,
        videoElem: null,
        sprite: null,
        init: function() {
            this.videoElem = document.createElement("video"),
            this.videoElem.addEventListener("ended", this._complete.bind(this));
            for (var t, e = Array.prototype.slice.call(arguments), i = 0; i < e.length; i++) t = document.createElement("source"),
            t.src = game.getMediaPath(e[i]),
            this.videoElem.appendChild(t);
            var s = game.PIXI.VideoTexture.textureFromVideo(this.videoElem);
            s.baseTexture.addEventListener("loaded", this._loaded.bind(this)),
            this.sprite = new game.Sprite(s)
        },
        _loaded: function() {
            "function" == typeof this._loadCallback && this._loadCallback()
        },
        _complete: function() {
            "function" == typeof this._completeCallback && this._completeCallback()
        },
        onLoaded: function(t) {
            this._loadCallback = t
        },
        onComplete: function(t) {
            this._completeCallback = t
        },
        play: function() {
            this.videoElem.loop = !!this.loop,
            this.videoElem.play()
        },
        stop: function(t) {
            this.videoElem.pause(),
            t && this.sprite.remove()
        }
    })
}),
game.module("engine.scene").body(function() {
    game.createClass("Scene", {
        backgroundColor: 16777215,
        objects: [],
        timers: [],
        emitters: [],
        stage: null,
        swipeDist: 30,
        swipeTime: 500,
        _updateOrder: [],
        staticInit: function() {
            game.audio && game.Audio.stopOnSceneChange && game.scene && (game.audio.stopMusic(), game.audio.stopSound(!1, !0), game.audio.pausedSounds.length = 0, game.audio.playingSounds.length = 0),
            game.scene = this;
            for (var t = 0; t < game.Scene.updateOrder.length; t++) this._updateOrder.push(game.Scene.updateOrder[t].ucfirst());
            for (var t = game.system.stage.children.length - 1; t >= 0; t--) game.system.stage.removeChild(game.system.stage.children[t]);
            if (game.system.stage.setBackgroundColor(this.backgroundColor), game.system.stage.interactive = !0, game.system.stage.mousemove = game.system.stage.touchmove = this._mousemove.bind(this), game.system.stage.click = game.system.stage.tap = this._click.bind(this), game.system.stage.mousedown = game.system.stage.touchstart = this._mousedown.bind(this), game.system.stage.mouseup = game.system.stage.mouseupoutside = game.system.stage.touchend = game.system.stage.touchendoutside = this._mouseup.bind(this), game.system.stage.mouseout = this._mouseout.bind(this), this.stage = new game.Container, game.system.webGL && game.device.cocoonJS) {
                var e = game.renderer.width / game.renderer.height,
                i = game.system.width / game.system.height;
                if (i > e) {
                    var s = game.renderer.width / game.system.width;
                    this.stage.scale.set(s, s),
                    this.stage.position.y = game.renderer.height / 2 - game.resumeheight * s / 2
                } else {
                    var s = game.renderer.height / game.system.height;
                    this.stage.scale.set(s, s),
                    this.stage.position.x = game.renderer.width / 2 - game.system.width * s / 2
                }
            }
            game.system.stage.addChild(this.stage),
            game.debugDraw && game.debugDraw.reset()
        },
        clear: function() {
            for (var t = this.stage.children.length - 1; t >= 0; t--) this.stage.removeChild(this.stage.children[t])
        },
        addObject: function(t) {
            t._remove && (t._remove = !1),
            this.objects.push(t)
        },
        removeObject: function(t) {
            t._remove = !0
        },
        addEmitter: function(t) {
            this.emitters.push(t)
        },
        removeEmitter: function(t) {
            t.remove()
        },
        addTimer: function(t, e, i) {
            var s = new game.Timer(t);
            return s.repeat = !!i,
            s.callback = e,
            this.timers.push(s),
            s
        },
        removeTimer: function(t, e) {
            t && (e || (t.callback = null), t.repeat = !1, t.set(0))
        },
        removeTimers: function(t) {
            for (var e = this.timers.length - 1; e >= 0; e--) this.removeTimer(this.timers[e], t)
        },
        addTween: function(t, e, i, s) {
            var a = new game.Tween(t);
            a.to(e, i);
            for (var r in s) a[r](s[r]);
            return a
        },
        click: function() {},
        mousedown: function() {},
        mouseup: function() {},
        mousemove: function() {},
        mouseout: function() {},
        keydown: function() {},
        keyup: function() {},
        swipe: function() {},
        pause: function() {
            game.audio && game.audio.systemPause()
        },
        resume: function() {
            game.audio && game.audio.systemResume()
        },
        exit: function() {},
        update: function() {},
        _mousedown: function(t) {
            t.startTime = Date.now(),
            t.swipeX = t.global.x,
            t.swipeY = t.global.y,
            this.mousedown(t.global.x, t.global.y, t.originalEvent)
        },
        _mouseup: function(t) {
            this.mouseup(t.global.x, t.global.y, t.originalEvent)
        },
        _click: function(t) {
            this.click(t.global.x, t.global.y, t.originalEvent)
        },
        _mousemove: function(t) {
            this.mousemove(t.global.x, t.global.y, t.originalEvent),
            t.startTime && (t.global.x - t.swipeX >= this.swipeDist ? this._swipe(t, "right") : t.global.x - t.swipeX <= -this.swipeDist ? this._swipe(t, "left") : t.global.y - t.swipeY >= this.swipeDist ? this._swipe(t, "down") : t.global.y - t.swipeY <= -this.swipeDist && this._swipe(t, "up"))
        },
        _swipe: function(t, e) {
            var i = Date.now() - t.startTime;
            t.startTime = null,
            (i <= this.swipeTime || 0 === this.swipeTime) && this.swipe(e)
        },
        _mouseout: function(t) {
            this.mouseout(t.global.x, t.global.y, t.originalEvent)
        },
        _update: function() {
            this.update();
            for (var t = 0; t < this._updateOrder.length; t++) this["_update" + this._updateOrder[t]]()
        },
        _updateTweens: function() {
            game.tweenEngine && game.tweenEngine.update()
        },
        _updatePhysics: function() {
            this.world && this.world.update()
        },
        _updateTimers: function() {
            for (var t = this.timers.length - 1; t >= 0; t--) this.timers[t].time() >= 0 && ("function" == typeof this.timers[t].callback && this.timers[t].callback(), this.timers[t].repeat ? this.timers[t].reset() : this.timers.splice(t, 1))
        },
        _updateEmitters: function() {
            for (var t = this.emitters.length - 1; t >= 0; t--) this.emitters[t].update(),
            this.emitters[t]._remove && this.emitters.splice(t, 1)
        },
        _updateObjects: function() {
            for (var t = this.objects.length - 1; t >= 0; t--)"function" != typeof this.objects[t].update || this.objects[t]._remove || this.objects[t].update(),
            this.objects[t]._remove && this.objects.splice(t, 1)
        },
        _updateRenderer: function() {
            game.debugDraw && game.debugDraw.update(),
            game.renderer.render(game.system.stage)
        },
        run: function() {
            this._update()
        }
    }),
    game.addAttributes("Scene", {
        updateOrder: ["tweens", "physics", "timers", "emitters", "objects", "renderer"]
    })
}),
game.module("engine.storage").body(function() {
    game.createClass("Storage", {
        init: function(t) {
            this.id = t || game.Storage.id,
            this.supported = this.isSupported()
        },
        isSupported: function() {
            if ("object" != typeof localStorage) return ! 1;
            try {
                localStorage.setItem("localStorage", 1),
                localStorage.removeItem("localStorage")
            } catch(t) {
                return ! 1
            }
            return ! 0
        },
        set: function(t, e) {
            return this.supported ? void localStorage.setItem(this.id + "." + t, this.encode(e)) : !1
        },
        get: function(t, e) {
            var i = localStorage.getItem(this.id + "." + t);
            if (null === i) return e;
            try {
                return this.decode(i)
            } catch(s) {
                return i
            }
        },
        has: function(t) {
            return null !== localStorage.getItem(this.id + "." + t)
        },
        remove: function(t) {
            localStorage.removeItem(this.id + "." + t)
        },
        reset: function() {
            for (var t = localStorage.length - 1; t >= 0; t--) {
                var e = localStorage.key(t); - 1 !== e.indexOf(this.id + ".") && localStorage.removeItem(e)
            }
        },
        encode: function(t) {
            return JSON.stringify(t)
        },
        decode: function(t) {
            return JSON.parse(t)
        }
    }),
    game.addAttributes("Storage", {
        id: ""
    })
}),
game.module("engine.system").body(function() {
    game.createClass("System", {
        currentSceneName: null,
        width: null,
        height: null,
        delta: 0,
        timer: null,
        canvas: null,
        paused: !1,
        hires: !1,
        retina: !1,
        rotateScreenVisible: !1,
        gameLoopId: 0,
        webGL: !1,
        originalWidth: null,
        originalHeight: null,
        newSceneClass: null,
        running: !1,
        rutaGame: null,
        init: function() {
            var t = game.System.width,
            e = game.System.height;
            "window" === t && (t = window.innerWidth),
            "window" === e && (e = window.innerHeight),
            this.originalWidth = t,
            this.originalHeight = e;
            for (var i = 2; i <= game.System.hires; i *= 2) window.innerWidth >= t * i && window.innerHeight >= e * i && (this.hires = !0, game.scale = i);
            if (this.hires && (t *= game.scale, e *= game.scale), game.System.retina && 2 === game.device.pixelRatio && game.scale < game.System.hires && (this.retina = !0, t *= 2, e *= 2, game.scale *= 2), this.width = t, this.height = e, this.canvasId = game.System.canvasId, this.timer = new game.Timer, this.initRenderer(t, e), game.normalizeVendorAttribute(this.canvas, "requestFullscreen"), game.normalizeVendorAttribute(this.canvas, "requestFullScreen"), game.normalizeVendorAttribute(navigator, "vibrate"), document.body.style.margin = 0, this.retina ? (this.canvas.style.width = t / 2 + "px", this.canvas.style.height = e / 2 + "px") : (this.canvas.style.width = t + "px", this.canvas.style.height = e + "px"), window.addEventListener("devicemotion",
            function(t) {
                game.accelerometer = game.accel = t.accelerationIncludingGravity
            },
            !1), game.renderer = this.renderer, game.device.cocoonJS) this.resizeToFill(),
            this.canvas.style.cssText = "idtkscale:" + game.System.idtkScale + ";";
            else {
                var s;
                "undefined" != typeof document.hidden ? s = "visibilitychange": "undefined" != typeof document.mozHidden ? s = "mozvisibilitychange": "undefined" != typeof document.msHidden ? s = "msvisibilitychange": "undefined" != typeof document.webkitHidden && (s = "webkitvisibilitychange"),
                document.addEventListener(s,
                function() {
                    if (game.System.pauseOnHide) {
                        var t = !!game.getVendorAttribute(document, "hidden");
                        t ? game.system.pause(!0) : game.system.resume(!0)
                    }
                },
                !1),
                game.System.bgColor && !game.System.bgColorMobile && (game.System.bgColorMobile = game.System.bgColor),
                game.System.bgColorMobile && !game.System.bgColorRotate && (game.System.bgColorRotate = game.System.bgColorMobile),
                game.System.bgImage && !game.System.bgImageMobile && (game.System.bgImageMobile = game.System.bgImage),
                game.System.bgImageMobile && !game.System.bgImageRotate && (game.System.bgImageRotate = game.System.bgImageMobile),
                game.device.mobile || (game.System.bgColor && (document.body.style.backgroundColor = game.System.bgColor), game.System.bgImage && (document.body.style.backgroundImage = "url(" + game.getMediaPath(game.System.bgImage) + ")")),
                game.System.bgPosition && (document.body.style.backgroundPosition = game.System.bgPosition),
                this.initResize()
            }
        },
        initRenderer: function(t, e) {
            if (!document.getElementById(this.canvasId)) {
                var i = document.createElement("canvas");
                game.device.cocoonJS && (i.screencanvas = !!game.System.screenCanvas),
                i.id = this.canvasId,
                document.body.appendChild(i)
            }
            game.PIXI.scaleModes.DEFAULT = game.PIXI.scaleModes[game.System.scaleMode.toUpperCase()] || 0,
            game.System.webGL && game.device.cocoonJS && (t = window.innerWidth * game.device.pixelRatio, e = window.innerHeight * game.device.pixelRatio),
            game.System.webGL ? this.renderer = game.autoDetectRenderer(t, e, {
                view: document.getElementById(this.canvasId),
                transparent: game.System.transparent,
                antialias: game.System.antialias
            }) : this.renderer = new game.CanvasRenderer(t, e, {
                view: document.getElementById(this.canvasId),
                transparent: game.System.transparent
            }),
            this.webGL = !!this.renderer.gl,
            this.canvas = this.renderer.view,
            this.stage = new game.Stage
        },
        resizeToFill: function() {
            if (game.System.resizeToFill && game.device.mobile && !this.rotateScreenVisible && !this._resizeToFill) {
                this._resizeToFill = !0;
                var t = this.width > this.height ? "landscape": "portrait",
                e = this.width / this.height,
                i = window.innerWidth > window.innerHeight ? "landscape": "portrait",
                s = window.innerWidth / window.innerHeight;
                s !== e && t === i && (s > e ? this.height = Math.round(this.width * (window.innerHeight / window.innerWidth)) : this.height = Math.round(this.width * (window.innerHeight / window.innerWidth)), this.resize(this.width, this.height))
            }
        },
        vibrate: function(t) {
            return navigator.vibrate ? navigator.vibrate(t) : !1
        },
        pause: function(t) {
            this.paused || (t ? this.pausedOnHide = !0 : this.paused = !0, game.scene && game.scene.pause())
        },
        resume: function(t) {
            t && this.paused || (t || this.paused) && (t ? this.pausedOnHide = !1 : this.paused = !1, game.Timer.last = Date.now(), game.scene && game.scene.resume())
        },
        setScene: function(t, e) {
            this.currentSceneName = t,
            t = game["Scene" + t],
            this.running && !this.paused ? (this.newSceneClass = t, this.removeAssets = e) : this.setSceneNow(t, e)
        },
        setSceneNow: function(t, e) {
            this.paused && (this.paused = !1),
            game.scene && game.scene.exit(),
            game.tweenEngine && (game.tweenEngine.tweens.length = 0),
            e && game.removeAssets(),
            game.scene = new t,
            game.Debug && game.Debug.enabled && !game.device.cocoonJS && !this.debug && (this.debug = new game.Debug),
            this.newSceneClass = null,
            this.startRunLoop()
        },
        startRunLoop: function() {
            this.gameLoopId && this.stopRunLoop(),
            this.gameLoopId = game.setGameLoop(this.run.bind(this), this.canvas),
            this.running = !0
        },
        stopRunLoop: function() {
            game.clearGameLoop(this.gameLoopId),
            this.running = !1
        },
        run: function() {
            this.paused || this.pausedOnHide || (game.Timer.update(), this.delta = this.timer.delta() / 1e3, this.debug && this.debug.reset(), game.scene.run(), this.debug && this.debug.update(), this.newSceneClass && this.setSceneNow(this.newSceneClass, this.removeAssets))
        },
        resize: function(t, e) {
            this.width = this.canvas.width = t,
            this.height = this.canvas.height = e,
            this.canvas.style.width = t + "px",
            this.canvas.style.height = e + "px",
            this.renderer.resize(this.width, this.height)
        },
        initResize: function() {
            if (this.ratio = this.width > this.height ? this.width / this.height: this.height / this.width, game.System.center && (this.canvas.style.margin = "auto"), game.device.mobile) {
                if (game.System.center || (this.canvas.style.position = "absolute", this.canvas.style.left = game.System.left + "px", this.canvas.style.top = game.System.top + "px"), document.addEventListener("touchstart",
                function(t) {
                    t.preventDefault()
                },
                !1), game.System.rotateScreen) {
                    var t = document.createElement("div");
                    if (t.innerHTML = game.System.rotateImg ? "": game.System.rotateMsg, t.style.position = "absolute", t.style.height = "12px", t.style.textAlign = "center", t.style.left = 0, t.style.right = 0, t.style.top = 0, t.style.bottom = 0, t.style.margin = "auto", t.style.display = "none", t.id = "panda-rotate", game.System.rotateDiv = t, document.body.appendChild(game.System.rotateDiv), game.System.rotateImg) {
                        var e = new Image,
                        i = this;
                        e.onload = function() {
                            t.image = e,
                            t.style.height = e.height + "px",
                            t.appendChild(e),
                            i.resizeRotateImage()
                        },
                        0 === game.System.rotateImg.indexOf("data:") ? e.src = game.System.rotateImg: e.src = game.getMediaPath(game.System.rotateImg),
                        e.style.position = "relative",
                        e.style.maxWidth = "100%"
                    }
                }
            } else if ((game.System.center || game.System.left || game.System.top) && (this.canvas.style.position = "absolute"), game.System.center ? (this.canvas.style.top = 0, this.canvas.style.left = 0, this.canvas.style.bottom = 0, this.canvas.style.right = 0) : (game.System.left || game.System.top) && (this.canvas.style.left = game.System.left + "px", this.canvas.style.top = game.System.top + "px"), game.System.scale) {
                var s = "auto" === game.System.minWidth ? this.retina ? this.width / 4 : this.width / 2 : game.System.minWidth,
                a = "auto" === game.System.minHeight ? this.retina ? this.height / 4 : this.height / 2 : game.System.minHeight,
                r = "auto" === game.System.maxWidth ? this.retina ? this.width / 2 : this.width: game.System.maxWidth,
                n = "auto" === game.System.maxHeight ? this.retina ? this.height / 2 : this.height: game.System.maxHeight;
                game.System.minWidth && (this.canvas.style.minWidth = s + "px"),
                game.System.minHeight && (this.canvas.style.minHeight = a + "px"),
                game.System.maxWidth && !game.System.scaleToFit && (this.canvas.style.maxWidth = r + "px"),
                game.System.maxHeight && !game.System.scaleToFit && (this.canvas.style.maxHeight = n + "px")
            }
            "undefined" == typeof window.onorientationchange || game.device.android ? window.onresize = this.onResize.bind(this) : window.onorientationchange = this.onResize.bind(this),
            this.onResize()
        },
        checkOrientation: function() {
            this.orientation = window.innerWidth < window.innerHeight ? "portrait": "landscape",
            game.device.android2 && 320 === window.innerWidth && 251 === window.innerHeight && (this.orientation = "portrait"),
            this.width > this.height && "landscape" !== this.orientation ? this.rotateScreenVisible = !0 : this.width < this.height && "portrait" !== this.orientation ? this.rotateScreenVisible = !0 : this.rotateScreenVisible = !1,
            game.System.rotateScreen || (this.rotateScreenVisible = !1),
            this.canvas.style.display = this.rotateScreenVisible ? "none": "block",
            game.System.rotateDiv && (game.System.rotateDiv.style.display = this.rotateScreenVisible ? "block": "none"),
            this.rotateScreenVisible && game.System.bgColorRotate && (document.body.style.backgroundColor = game.System.bgColorRotate),
            !this.rotateScreenVisible && game.System.bgColorMobile && (document.body.style.backgroundColor = game.System.bgColorMobile),
            this.rotateScreenVisible && game.System.bgImageRotate && (document.body.style.backgroundImage = "url(" + game.getMediaPath(game.System.bgImageRotate) + ")"),
            !this.rotateScreenVisible && game.System.bgImageMobile && (document.body.style.backgroundImage = "url(" + game.getMediaPath(game.System.bgImageMobile) + ")"),
            this.rotateScreenVisible && game.system && "function" == typeof game.system.pause && game.system.pause(),
            !this.rotateScreenVisible && game.system && "function" == typeof game.system.resume && game.system.resume(),
            this.rotateScreenVisible && this.resizeRotateImage()
        },
        resizeRotateImage: function() {
            this.rotateScreenVisible && game.System.rotateDiv.image && (game.System.rotateDiv.image.style.height = window.innerHeight + "px", game.System.rotateDiv.image.style.width = window.innerWidth + "px", game.System.rotateDiv.style.height = window.innerHeight + "px", game.System.rotateDiv.style.width = window.innerWidth + "px", game.System.rotateDiv.style.bottom = "auto")
        },
        onResize: function() {
            if (game.device.mobile && this.checkOrientation(), game.System.scale) if (game.device.mobile) {
                this.ratio = "landscape" === this.orientation ? this.width / this.height: this.height / this.width,
                this.resizeToFill();
                var t = window.innerWidth,
                e = window.innerHeight;
                game.device.iOS7 && 256 === window.innerHeight && (e = 320),
                game.device.iOS7 && 319 === window.innerHeight && (e = 320),
                game.device.iOS7 && 2 === game.device.pixelRatio && "landscape" === this.orientation && (e += 2),
                game.device.iPad && 671 === e && (e = 672),
                this.width > this.height ? "landscape" === this.orientation && e * this.ratio <= t ? (this.canvas.style.height = e + "px", this.canvas.style.width = e * this.width / this.height + "px") : (this.canvas.style.width = t + "px", this.canvas.style.height = t * this.height / this.width + "px") : "portrait" === this.orientation && t * this.ratio <= e ? (this.canvas.style.width = t + "px", this.canvas.style.height = t * this.height / this.width + "px") : (this.canvas.style.height = e + "px", this.canvas.style.width = e * this.width / this.height + "px"),
                game.device.ejecta || window.scroll(0, 1),
                this.rotateScreenVisible || !game.loader || game.loader.started || game.loader.start()
            } else {
                if (0 === window.innerWidth) return;
                window.innerWidth < this.width || window.innerHeight < this.height || game.System.scaleToFit ? window.innerWidth / this.width < window.innerHeight / this.height ? (this.canvas.style.width = window.innerWidth + "px", this.canvas.style.height = Math.floor(window.innerWidth * (this.height / this.width)) + "px") : (this.canvas.style.height = window.innerHeight + "px", this.canvas.style.width = Math.floor(window.innerHeight * (this.width / this.height)) + "px") : (this.canvas.style.width = this.width + "px", this.canvas.style.height = this.height + "px")
            }
        }
    }),
    game.addAttributes("System", {
        center: !0,
        left: 0,
        top: 0,
        scale: !0,
        minWidth: "auto",
        minHeight: "auto",
        maxWidth: "auto",
        maxHeight: "auto",
        idtkScale: "ScaleAspectFit",
        screenCanvas: !0,
        hires: 0,
        retina: !1,
        pauseOnHide: !0,
        rotateScreen: !0,
        width: 1024,
        height: 768,
        bgColor: null,
        bgColorMobile: null,
        bgColorRotate: null,
        bgImage: null,
        bgImageMobile: null,
        bgImageRotate: null,
        bgPosition: null,
        rotateMsg: "Please rotate your device",
        rotateImg: null,
        webGL: !1,
        transparent: !1,
        antialias: !1,
        resizeToFill: !1,
        startScene: "Main",
        scaleToFit: !1,
        canvasId: "canvas",
        scaleMode: "linear"
    })
}),
game.module("engine.timer").body(function() {
    game.createClass("Timer", {
        target: 0,
        base: 0,
        last: 0,
        pauseTime: 0,
        init: function(t) {
            this.last = game.Timer.time,
            this.set(t)
        },
        set: function(t) {
            "number" != typeof t && (t = 0),
            this.target = t,
            this.reset()
        },
        reset: function() {
            this.base = game.Timer.time,
            this.pauseTime = 0
        },
        delta: function() {
            var t = game.Timer.time - this.last;
            return this.last = game.Timer.time,
            this.pauseTime ? 0 : t
        },
        time: function() {
            var t = (this.pauseTime || game.Timer.time) - this.base - this.target;
            return t
        },
        pause: function() {
            this.pauseTime || (this.pauseTime = game.Timer.time)
        },
        resume: function() {
            this.pauseTime && (this.base += game.Timer.time - this.pauseTime, this.pauseTime = 0)
        }
    }),
    game.addAttributes("Timer", {
        last: 0,
        time: Number.MIN_VALUE,
        speedFactor: 1,
        minFPS: 20,
        update: function() {
            var t = Date.now();
            game.Timer.last || (game.Timer.last = t),
            game.Timer.time += Math.min(t - game.Timer.last, 1e3 / game.Timer.minFPS) * game.Timer.speedFactor,
            game.Timer.last = t
        }
    })
}),
game.module("engine.tween").body(function() {
    game.createClass("TweenEngine", {
        tweens: [],
        removeAll: function() {
            for (var t = 0; t < this.tweens.length; t++) this.tweens[t].shouldRemove = !0
        },
        stopTweensForObject: function(t) {
            for (var e = this.tweens.length - 1; e >= 0; e--) this.tweens[e].object === t && this.tweens[e].stop()
        },
        getTweenForObject: function(t) {
            for (var e = this.tweens.length - 1; e >= 0; e--) if (this.tweens[e].object === t) return this.tweens[e];
            return ! 1
        },
        add: function(t) {
            this.tweens.push(t)
        },
        remove: function(t) {
            var e = this.tweens.indexOf(t); - 1 !== e && (this.tweens[e].shouldRemove = !0)
        },
        update: function() {
            if (0 === this.tweens.length) return ! 1;
            for (var t = this.tweens.length - 1; t >= 0; t--) this.tweens[t].update() || this.tweens.splice(t, 1);
            return ! 0
        }
    }),
    game.createClass("Tween", {
        playing: !1,
        paused: !1,
        object: null,
        valuesStart: {},
        valuesEnd: null,
        valuesStartRepeat: {},
        duration: 1e3,
        repeatCount: 0,
        repeats: 0,
        yoyoEnabled: !1,
        reversed: !1,
        delayTime: 0,
        delayRepeat: !1,
        startTime: null,
        originalStartTime: null,
        easingFunction: null,
        interpolationFunction: null,
        chainedTweens: [],
        onStartCallback: null,
        onStartCallbackFired: !1,
        onUpdateCallback: null,
        onCompleteCallback: null,
        onRepeatCallback: null,
        currentTime: 0,
        shouldRemove: !1,
        init: function(t) {
            if ("object" != typeof t) throw "Tween parameter must be object";
            this.object = t,
            this.easingFunction = game.Tween.Easing.Linear.None,
            this.interpolationFunction = game.Tween.Interpolation.Linear;
            for (var e in t) this.valuesStart[e] = parseFloat(t[e], 10)
        },
        to: function(t, e) {
            return this.duration = e || this.duration,
            this.valuesEnd = t,
            this
        },
        start: function() {
            game.tweenEngine.add(this),
            this.currentTime = 0,
            this.playing = !0,
            this.onStartCallbackFired = !1,
            this.startTime = this.delayTime,
            this.originalStartTime = this.startTime;
            for (var t in this.valuesEnd) {
                if (this.valuesEnd[t] instanceof Array) {
                    if (0 === this.valuesEnd[t].length) continue;
                    this.valuesEnd[t] = [this.object[t]].concat(this.valuesEnd[t])
                }
                this.valuesStart[t] = this.object[t],
                this.valuesStart[t] instanceof Array == !1 && (this.valuesStart[t] *= 1),
                this.valuesStartRepeat[t] = this.valuesStart[t] || 0
            }
            return this
        },
        stop: function() {
            return this.playing ? (game.tweenEngine.remove(this), this.playing = !1, this.stopChainedTweens(), this) : this
        },
        pause: function() {
            this.paused = !0
        },
        resume: function() {
            this.paused = !1
        },
        stopChainedTweens: function() {
            for (var t = 0,
            e = this.chainedTweens.length; e > t; t++) this.chainedTweens[t].stop()
        },
        delay: function(t, e) {
            return this.delayTime = t,
            this.delayRepeat = !!e,
            this
        },
        repeat: function(t) {
            return "undefined" == typeof t && (t = 1 / 0),
            this.repeatCount = t,
            this
        },
        yoyo: function(t) {
            return "undefined" == typeof t && (t = !0),
            this.yoyoEnabled = t,
            this
        },
        easing: function(t) {
            return "string" == typeof t ? (t = t.split("."), this.easingFunction = game.Tween.Easing[t[0]][t[1]]) : this.easingFunction = t,
            this
        },
        interpolation: function(t) {
            return this.interpolationFunction = t,
            this
        },
        chain: function() {
            return this.chainedTweens = arguments,
            this
        },
        onStart: function(t) {
            return this.onStartCallback = t,
            this
        },
        onUpdate: function(t) {
            return this.onUpdateCallback = t,
            this
        },
        onComplete: function(t) {
            return this.onCompleteCallback = t,
            this
        },
        onRepeat: function(t) {
            return this.onRepeatCallback = t,
            this
        },
        update: function() {
            if (this.shouldRemove) return ! 1;
            if (this.paused) return ! 0;
            if (this.currentTime += 1e3 * game.system.delta, this.currentTime < this.startTime) return ! 0;
            this.onStartCallbackFired === !1 && (null !== this.onStartCallback && this.onStartCallback.call(this.object), this.onStartCallbackFired = !0);
            var t = (this.currentTime - this.startTime) / this.duration;
            t = t > 1 ? 1 : t;
            var e, i = this.easingFunction(t);
            for (e in this.valuesEnd) {
                var s = this.valuesStart[e] || 0,
                a = this.valuesEnd[e];
                a instanceof Array ? this.object[e] = this.interpolationFunction(a, i) : ("string" == typeof a && (a = s + parseFloat(a, 10)), "number" == typeof a && (this.object[e] = s + (a - s) * i))
            }
            if (null !== this.onUpdateCallback && this.onUpdateCallback.call(this.object, i), 1 === t) {
                if (this.repeatCount > 0) {
                    isFinite(this.repeatCount) && this.repeatCount--,
                    this.repeats += 1;
                    for (e in this.valuesStartRepeat) {
                        if ("string" == typeof this.valuesEnd[e] && (this.valuesStartRepeat[e] = this.valuesStartRepeat[e] + parseFloat(this.valuesEnd[e], 10)), this.yoyoEnabled) {
                            var r = this.valuesStartRepeat[e];
                            this.valuesStartRepeat[e] = this.valuesEnd[e],
                            this.valuesEnd[e] = r,
                            this.reversed = !this.reversed
                        }
                        this.valuesStart[e] = this.valuesStartRepeat[e]
                    }
                    return this.delayRepeat || (this.delayTime = 0),
                    this.startTime = this.originalStartTime + this.repeats * (this.duration + this.delayTime),
                    null !== this.onRepeatCallback && this.onRepeatCallback.call(this.object),
                    !0
                }
                this.playing = !1,
                null !== this.onCompleteCallback && this.onCompleteCallback.call(this.object);
                for (var n = 0,
                o = this.chainedTweens.length; o > n; n++) this.chainedTweens[n].start();
                return ! 1
            }
            return ! 0
        }
    }),
    game.Tween.Easing = {
        Linear: {
            None: function(t) {
                return t
            }
        },
        Quadratic: {
            In: function(t) {
                return t * t
            },
            Out: function(t) {
                return t * (2 - t)
            },
            InOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t: -.5 * (--t * (t - 2) - 1)
            }
        },
        Cubic: {
            In: function(t) {
                return t * t * t
            },
            Out: function(t) {
                return--t * t * t + 1
            },
            InOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t: .5 * ((t -= 2) * t * t + 2)
            }
        },
        Quartic: {
            In: function(t) {
                return t * t * t * t
            },
            Out: function(t) {
                return 1 - --t * t * t * t
            },
            InOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t: -.5 * ((t -= 2) * t * t * t - 2)
            }
        },
        Quintic: {
            In: function(t) {
                return t * t * t * t * t
            },
            Out: function(t) {
                return--t * t * t * t * t + 1
            },
            InOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t * t: .5 * ((t -= 2) * t * t * t * t + 2)
            }
        },
        Sinusoidal: {
            In: function(t) {
                return 1 - Math.cos(t * Math.PI / 2)
            },
            Out: function(t) {
                return Math.sin(t * Math.PI / 2)
            },
            InOut: function(t) {
                return.5 * (1 - Math.cos(Math.PI * t))
            }
        },
        Exponential: {
            In: function(t) {
                return 0 === t ? 0 : Math.pow(1024, t - 1)
            },
            Out: function(t) {
                return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
            },
            InOut: function(t) {
                return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * ( - Math.pow(2, -10 * (t - 1)) + 2)
            }
        },
        Circular: {
            In: function(t) {
                return 1 - Math.sqrt(1 - t * t)
            },
            Out: function(t) {
                return Math.sqrt(1 - --t * t)
            },
            InOut: function(t) {
                return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
            }
        },
        Elastic: {
            In: function(t) {
                var e, i = .1,
                s = .4;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = s / 4) : e = s * Math.asin(1 / i) / (2 * Math.PI), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / s)))
            },
            Out: function(t) {
                var e, i = .1,
                s = .4;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = s / 4) : e = s * Math.asin(1 / i) / (2 * Math.PI), i * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / s) + 1)
            },
            InOut: function(t) {
                var e, i = .1,
                s = .4;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = s / 4) : e = s * Math.asin(1 / i) / (2 * Math.PI), (t *= 2) < 1 ? -.5 * i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / s) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / s) * .5 + 1)
            }
        },
        Back: {
            In: function(t) {
                var e = 1.70158;
                return t * t * ((e + 1) * t - e)
            },
            Out: function(t) {
                var e = 1.70158;
                return--t * t * ((e + 1) * t + e) + 1
            },
            InOut: function(t) {
                var e = 2.5949095;
                return (t *= 2) < 1 ? .5 * t * t * ((e + 1) * t - e) : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
            }
        },
        Bounce: {
            In: function(t) {
                return 1 - game.Tween.Easing.Bounce.Out(1 - t)
            },
            Out: function(t) {
                return 1 / 2.75 > t ? 7.5625 * t * t: 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
            },
            InOut: function(t) {
                return.5 > t ? .5 * game.Tween.Easing.Bounce.In(2 * t) : .5 * game.Tween.Easing.Bounce.Out(2 * t - 1) + .5
            }
        }
    },
    game.Tween.Interpolation = {
        Linear: function(t, e) {
            var i = t.length - 1,
            s = i * e,
            a = Math.floor(s),
            r = game.Tween.Interpolation.Utils.Linear;
            return 0 > e ? r(t[0], t[1], s) : e > 1 ? r(t[i], t[i - 1], i - s) : r(t[a], t[a + 1 > i ? i: a + 1], s - a)
        },
        Bezier: function(t, e) {
            var i, s = 0,
            a = t.length - 1,
            r = Math.pow,
            n = game.Tween.Interpolation.Utils.Bernstein;
            for (i = 0; a >= i; i++) s += r(1 - e, a - i) * r(e, i) * t[i] * n(a, i);
            return s
        },
        CatmullRom: function(t, e) {
            var i = t.length - 1,
            s = i * e,
            a = Math.floor(s),
            r = game.Tween.Interpolation.Utils.CatmullRom;
            return t[0] === t[i] ? (0 > e && (a = Math.floor(s = i * (1 + e))), r(t[(a - 1 + i) % i], t[a], t[(a + 1) % i], t[(a + 2) % i], s - a)) : 0 > e ? t[0] - (r(t[0], t[0], t[1], t[1], -s) - t[0]) : e > 1 ? t[i] - (r(t[i], t[i], t[i - 1], t[i - 1], s - i) - t[i]) : r(t[a ? a - 1 : 0], t[a], t[a + 1 > i ? i: a + 1], t[a + 2 > i ? i: a + 2], s - a)
        },
        Utils: {
            Linear: function(t, e, i) {
                return (e - t) * i + t
            },
            Bernstein: function(t, e) {
                var i = game.Tween.Interpolation.Utils.Factorial;
                return i(t) / i(e) / i(t - e)
            },
            Factorial: function() {
                var t = [1];
                return function(e) {
                    var i, s = 1;
                    if (t[e]) return t[e];
                    for (i = e; i > 1; i--) s *= i;
                    return t[e] = s
                }
            } (),
            CatmullRom: function(t, e, i, s, a) {
                var r = .5 * (i - t),
                n = .5 * (s - e),
                o = a * a,
                h = a * o;
                return (2 * e - 2 * i + r + n) * h + ( - 3 * e + 3 * i - 2 * r - n) * o + r * a + e
            }
        }
    },
    game.createClass("TweenGroup", {
        tweens: [],
        onComplete: null,
        complete: !1,
        init: function(t) {
            this.onComplete = t
        },
        add: function(t) {
            return t.onComplete(this.tweenComplete.bind(this)),
            this.tweens.push(t),
            t
        },
        tweenComplete: function() {
            if (!this.complete) {
                for (var t = 0; t < this.tweens.length; t++) if (this.tweens[t].playing) return;
                this.complete = !0,
                "function" == typeof this.onComplete && this.onComplete()
            }
        },
        remove: function(t) {
            this.tweens.erase(t)
        },
        start: function() {
            for (var t = 0; t < this.tweens.length; t++) this.tweens[t].start()
        },
        pause: function() {
            for (var t = 0; t < this.tweens.length; t++) this.tweens[t].pause()
        },
        resume: function() {
            for (var t = 0; t < this.tweens.length; t++) this.tweens[t].resume()
        },
        stop: function(t, e) {
            if (!this.complete) {
                for (var i = 0; i < this.tweens.length; i++) this.tweens[i].stop(e); ! this.complete && t && this.tweenComplete(),
                this.complete = !0
            }
        }
    })
}),
game.module("game.main").require("game.assets", "game.title", "game.gameover", "game.shop", "game.tramos").body(function() {
    game.createScene("Main", {
        assets: null,
        mapaFila: 42,
        mapaColum: 24,
        permitirStorage: !1,
        juegoIniciado: !1,
        mostrarAd: !0,
        brand: null,
        enAds: !1,
        cheatCoins: 9999,
        cheatInmortal: 0,
        gameOver: 3,
        score: 0,
        bestScore: 0,
        coins: 9999,
        escala: 1,
        contenedorMaestro: null,
        contenedorGame: null,
        contenedorInGame: null,
        contenedorMapa: null,
        contenedorSobrePersonaje: null,
        contenedorBajoPersonaje: null,
        contenedorNuves: null,
        matrixGrilla: [[]],
        rutaPj: [],
        cuadroHorizontal: 41,
        cuadroVertical: 27,
        sonido: !0,
        coinsArray: [0, 0, 0, 0],
        scoreArray: [0, 0, 0, 0, 0],
        indexTiles: [],
        indexObjetos: 0,
        indexPortalesE: 0,
        indexPortalesS: 0,
        indexMonedas: 0,
        indexTorres: 0,
        indexHojas: 0,
        indexPatos: 0,
        indexTuberias: 0,
        indexEscaleras: 0,
        indexPilares: 0,
        indexFlores: 0,
        indexGates: 0,
        indexBrillitos: 0,
        indexJuntadores: 0,
        maxPortalesE: 20,
        maxPortalesS: 20,
        maxTiles: 200,
        maxMonedas: 200,
        maxTorres: 20,
        maxHojas: 50,
        maxPatos: 50,
        maxTuberias: 20,
        maxEscaleras: 20,
        maxPilares: 50,
        maxFlores: 50,
        maxGates: 30,
        maxBrillitos: 100,
        maxJuntadores: 20,
        indexRecorrido: 0,
        currentTile: [],
        menu: null,
        Tramos: null,
        GameOver: null,
        Shop: null,
        camara: null,
        personaje: [],
        sombra: [],
        contenedorPersonaje: [],
        contenedorTargetCamara: null,
        speed: .17,
        speedSalto: .17,
        estadoSalto: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
        avanzePj: [],
        avanzePjAux: [],
        tweensPersonaje: [[]],
        YChar: -40,
        YSalto: 30,
        controlNuves: 0,
        speedNuves: .04,
        tiempoNuves: null,
        tweensNuves: [],
        canvasHeight: 900,
        inmortal: !1,
        numClones: 20,
        numClonesActivos: 0,
        partida: null,
        numClonesBorrados: 0,
        tramosParams: [],
        clonesActivos: [],
        currentAnim: [],
        contenedorPj: [],
        puntosFinalesClon: [],
        tramoUsado: null,
        hiloMapa: null,
        delayInicial: 3,
        indexDelay: 1,
        estadoClon: [],
        estadoSaltoSonido: 0,
        personajeElegido: 0,
        gameCoins: 9999,
        tilePorMedio: [],
        gateSound: 1,
        iphoneMusica: !1,
        paramsCreadores: [],
        levelIndex: [],
        levelStep: 0,
        enRotar: !1,
        awards: [],
        rotarMSG: function() {
            0 == this.enRotar && (this.agregaSprite(this.assets.rotar, this.stage, 1, 0, 0, !1), this.llamaAccion(30, this.poneRotar.bind(this)), this.enRotar = !0)
        },
        poneRotar: function() {
            game.system.pause()
        },
        quitaRotarMSG: function() {
            1 == this.enRotar && (this.sacaSprite(this.assets.rotar, this.stage), this.enRotar = !1, game.system.resume())
        },
        clickLogo: function() {
            window.open("#")
        },
        init: function() {
            game.system.rutaGame = this,
            this.Tramos = new game.tramos(this),
            this.camara = new game.Camera,
            this.assets = new game.assets,
            this.assets.logo.interactive = !0,
            this.assets.logo.buttonMode = !0,
            this.assets.logo.mousedown = this.assets.logo.touchstart = this.clickLogo.bind(this),
            this.variablesStorage(),
            this.contenedorMaestro = new game.Container,
            this.contenedorGame = new game.Container,
            this.contenedorNuves = new game.Container,
            this.contenedorInGame = new game.Container,
            this.contenedorMapa = new game.Container;
            for (var t = 0; t < this.numClones; t++) this.contenedorPersonaje[t] = new game.Container,
            this.contenedorPj[t] = new game.Container;
            if (this.contenedorTargetCamara = new game.Container, this.contenedorSobrePersonaje = new game.Container, this.contenedorBajoPersonaje = new game.Container, this.agregaSprite(this.contenedorMaestro, this.stage, this.escala, 0, 0, !1), this.camara.minX = 0, this.camara.minY = 0, this.camara.maxX = 0, null != Api && void 0 != LOGOimg && null != LOGOimg) {
                LOGOimg.visibility = "hidden";
                var e = noBrand;
                this.brand = e,
                e.image ? Api.Branding.displaySplashScreen(this.continue_Game.bind(this)) : this.continue_Game()
            } else this.continue_Game()
        },
        continue_Game: function() {
            this.juegoIniciado = !0,
            this.empezarMenu()
        },
        empezarMenu: function() {
            this.variablesIniciales();
            var t = this.Tramos.getTramoInicial(this.tramoUsado),
            e = t[0];
            this.tramoUsado = t[1],
            this.tramosParams = t[2],
            this.creaMapaDemo(0, "abajo", e, e.length);
            var i = this.matrixGrilla[1][0][0].y - this.matrixGrilla[0][0][0].y;
            this.tweensPersonaje[0][1] = this.creaTween(this.contenedorInGame, this.contenedorInGame.x, this.contenedorInGame.x, this.contenedorInGame.y, this.contenedorInGame.y - i, 158, game.Tween.Easing.Linear.None, this.mueveMundo.bind(this, 1), null, !0),
            this.menu = new game.title(this, !0),
            this.addObject(this.menu)
        },
        mueveMundo: function(t) {
            var e = this.matrixGrilla[1][0][0].y - this.matrixGrilla[0][0][0].y;
            t += 1,
            this.tweensPersonaje[0][1] = this.creaTween(this.contenedorInGame, this.contenedorInGame.x, this.contenedorInGame.x, this.contenedorInGame.y, this.contenedorInGame.y - e, 158, game.Tween.Easing.Linear.None, this.mueveMundo.bind(this, t, 0), this.mueveNuves.bind(this), !0),
            this.updateMundo(t, 0)
        },
        updateMundo: function(t, e) {
            if (this.currentTile[e] = t, t += 1, t > 0) {
                var i = t;
                if (72 + this.indexRecorrido - i < 78) for (var s = 0; 2 > s; s++) {
                    var a = 72 + this.indexRecorrido;
                    this.indexRecorrido = this.indexRecorrido + 1;
                    for (var r = 0; r < this.mapaColum; r++) {
                        if (this.matrixGrilla[a][r][1] >= 1 && this.matrixGrilla[a][r][1] <= 3 || this.matrixGrilla[a][r][1] >= 50) {
                            if (3 != this.matrixGrilla[a][r][1]) {
                                var n = this.creaTile(this.matrixGrilla[a][r][1]);
                                this.agregaSprite(n, this.contenedorMapa, 1, this.matrixGrilla[a][r][0].x, this.matrixGrilla[a][r][0].y, !1),
                                this.matrixGrilla[a][r][2] = n,
                                null != this.matrixGrilla[a][r][8] && (this.matrixGrilla[a][r][8] = this.creaAsset(this.matrixGrilla[a][r][8]), this.agregaSprite(this.matrixGrilla[a][r][8][0], n, 1, this.matrixGrilla[a][r][8][1], this.matrixGrilla[a][r][8][2], !1), this.matrixGrilla[a][r][8][0].visible = !0, this.matrixGrilla[a][r][8][0].play("normal", 0))
                            }
                        } else if (this.matrixGrilla[a][r][1] >= 4 && this.matrixGrilla[a][r][1] <= 49) {
                            var o = this.creaAsset(this.matrixGrilla[a][r][1]),
                            n = o[0],
                            h = o[1],
                            l = o[2],
                            d = o[3];
                            0 == d ? n.addTo(this.contenedorBajoPersonaje) : 1 == d && n.addTo(this.contenedorSobrePersonaje),
                            n.position.set(this.matrixGrilla[a][r][0].x + h, this.matrixGrilla[a][r][0].y + l),
                            this.matrixGrilla[a][r][2] = n,
                            this.tileEsTorre(this.matrixGrilla[a][r][1]) ? (this.matrixGrilla[a][r][3] = o[4][1], this.agregaSprite(o[4][1], this.contenedorBajoPersonaje, 1, this.matrixGrilla[a][r][0].x + o[4][2], this.matrixGrilla[a][r][0].y + o[4][3])) : this.tileEsPortalEntrada(this.matrixGrilla[a][r][1]) || this.tileEsPortalSalida(this.matrixGrilla[a][r][1]) ? (this.matrixGrilla[a][r][3] = o[4][0], this.agregaSprite(o[4][0], this.contenedorMapa, 1, this.matrixGrilla[a][r][0].x + o[4][1], this.matrixGrilla[a][r][0].y + o[4][2]), this.matrixGrilla[a][r][9] = o[4][3], o[4][3].addTo(this.contenedorMapa), o[4][3].x = this.matrixGrilla[a][r][0].x + o[4][4], o[4][3].y = this.matrixGrilla[a][r][0].y + o[4][5], this.contenedorMapa.setChildIndex(o[4][3], 0)) : this.tileEsJuntador(this.matrixGrilla[a][r][1]) ? (this.matrixGrilla[a][r][3] = o[4][0], this.agregaSprite(o[4][0], this.contenedorMapa, 1, this.matrixGrilla[a][r][0].x + o[4][1], this.matrixGrilla[a][r][0].y + o[4][2])) : (this.tileEsPilarPajaro(this.matrixGrilla[a][r][1]) || this.tileEsHojasPajaro(this.matrixGrilla[a][r][1])) && (this.matrixGrilla[a][r][3] = o[4][0], this.agregaSprite(o[4][0], this.contenedorSobrePersonaje, o[4][3], this.matrixGrilla[a][r][0].x + o[4][1], this.matrixGrilla[a][r][0].y + o[4][2]))
                        }
                        t > 62 && this.indexRecorrido - 47 >= 0 && (this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] >= 1 && this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] <= 3 || this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] >= 50 ? 3 != this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] && this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][2], this.contenedorMapa) : this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] >= 4 && this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] <= 49 && (this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][2], this.contenedorMapa), this.tileEsTorre(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) ? this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorBajoPersonaje) : this.tileEsJuntador(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) ? this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorMapa) : this.tileEsPortalEntrada(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) || this.tileEsPortalSalida(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) ? (this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorMapa), this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][9], this.contenedorMapa)) : (this.tileEsPilarPajaro(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) || this.tileEsHojasPajaro(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1])) && (this.matrixGrilla[0 + this.indexRecorrido - 47][r][3].getChildAt(0) && this.matrixGrilla[0 + this.indexRecorrido - 47][r][3].getChildAt(0).stop(), this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorSobrePersonaje))))
                    }
                }
            }
        },
        empezarGame: function() {
            this.variablesIniciales(),
            this.creaMundo(),
            this.gameOver = 0,
            this.contenedorMaestro.filters = null,
            this.poneHud(),
            game.audio.playMusic("inGameMusic", !0)
        },
        poneHud: function() {
            for (var t = 0; 1 > t; t++) this.agregaSprite(this.assets.numerosScore[t][0], this.contenedorMaestro, 1, 10 + 30 * t, 8);
            this.agregaSprite(this.assets.numerosCoins[5], this.contenedorMaestro, 1, game.system.width - this.assets.numerosCoins[5].width, 0);
            for (var t = 0; 1 > t; t++) this.agregaSprite(this.assets.numerosCoins[t][0], this.contenedorMaestro, 1, game.system.width - this.assets.numerosCoins[t][0].width - 7 - 14 * t, 6);
            this.configuraCoins()
        },
        sacaHud: function() {
            for (var t = 0; 5 > t; t++) for (var e = 0; 10 > e; e++) this.assets.numerosScore[t][e].parent == this.contenedorMaestro && this.sacaSprite(this.assets.numerosScore[t][e], this.contenedorMaestro);
            this.sacaSprite(this.assets.numerosCoins[5], this.contenedorMaestro);
            for (var t = 0; 4 > t; t++) for (var e = 0; 10 > e; e++) this.assets.numerosCoins[t][e].parent == this.contenedorMaestro && this.sacaSprite(this.assets.numerosCoins[t][e], this.contenedorMaestro)
        },
        configuraScore: function() {
            if (0 != this.gameOver) return 0;
            var t = this.score;
            if (10 > t) this.scoreArray[0] = t,
            this.scoreArray[1] = 0,
            this.scoreArray[2] = 0,
            this.scoreArray[3] = 0,
            this.scoreArray[4] = 0;
            else if (100 > t) {
                var e = t;
                e = Math.floor(e / 10);
                var i = t;
                i %= 10,
                this.scoreArray[0] = i,
                this.scoreArray[1] = e,
                this.scoreArray[2] = 0,
                this.scoreArray[3] = 0,
                this.scoreArray[4] = 0
            } else if (1e3 > t) {
                var e = t;
                e = Math.floor(e / 100);
                var i = t % 100,
                s = Math.floor(i / 10),
                a = i % 10;
                this.scoreArray[0] = a,
                this.scoreArray[1] = s,
                this.scoreArray[2] = e,
                this.scoreArray[3] = 0,
                this.scoreArray[4] = 0
            } else if (1e4 > t) {
                var e = t;
                e = Math.floor(e / 1e3);
                var i = t % 1e3,
                s = Math.floor(i / 100),
                a = i % 100,
                r = Math.floor(a / 10),
                n = a % 10;
                this.scoreArray[0] = n,
                this.scoreArray[1] = r,
                this.scoreArray[2] = s,
                this.scoreArray[3] = e,
                this.scoreArray[4] = 0
            } else if (1e5 > t) {
                var e = t;
                e = Math.floor(e / 1e4);
                var i = t % 1e4,
                s = Math.floor(i / 1e3),
                a = i % 1e3,
                r = Math.floor(a / 100),
                n = a % 100,
                o = Math.floor(n / 10),
                h = n % 10;
                this.scoreArray[0] = h,
                this.scoreArray[1] = o,
                this.scoreArray[2] = r,
                this.scoreArray[3] = s,
                this.scoreArray[4] = e
            } else this.score = 99999,
            this.scoreArray[0] = 9,
            this.scoreArray[1] = 9,
            this.scoreArray[2] = 9,
            this.scoreArray[3] = 9,
            this.scoreArray[4] = 9;
            this.seteaHudScore()
        },
        seteaHudScore: function() {
            for (var t = 0,
            e = !1,
            i = 0; 5 > i; i++) {
                for (var s = 0; 10 > s; s++) this.assets.numerosScore[i][s].parent == this.contenedorMaestro && this.sacaSprite(this.assets.numerosScore[i][s], this.contenedorMaestro);
                0 == this.scoreArray[4 - i] && 0 == e && 4 > i ? t += 1 : this.scoreArray[4 - i] > 0 && (e = !0)
            }
            for (var i = 0 + t; 5 > i; i++) {
                var a = this.scoreArray[4 - i];
                this.agregaSprite(this.assets.numerosScore[i][a], this.contenedorMaestro, 1, 10 + 30 * i - 30 * t, 8)
            }
        },
        configuraCoins: function() {
            if (0 != this.gameOver) return 0;
            var t = this.coins;
            if (10 > t) this.coinsArray[0] = t,
            this.coinsArray[1] = 0,
            this.coinsArray[2] = 0,
            this.coinsArray[3] = 0;
            else if (100 > t) {
                var e = t;
                e = Math.floor(e / 10);
                var i = t;
                i %= 10,
                this.coinsArray[0] = i,
                this.coinsArray[1] = e,
                this.coinsArray[2] = 0,
                this.coinsArray[3] = 0
            } else if (1e3 > t) {
                var e = t;
                e = Math.floor(e / 100);
                var i = t % 100,
                s = Math.floor(i / 10),
                a = i % 10;
                this.coinsArray[0] = a,
                this.coinsArray[1] = s,
                this.coinsArray[2] = e,
                this.coinsArray[3] = 0
            } else if (1e4 > t) {
                var e = t;
                e = Math.floor(e / 1e3);
                var i = t % 1e3,
                s = Math.floor(i / 100),
                a = i % 100,
                r = Math.floor(a / 10),
                n = a % 10;
                this.coinsArray[0] = n,
                this.coinsArray[1] = r,
                this.coinsArray[2] = s,
                this.coinsArray[3] = e
            } else this.coins = 9999,
            this.coinsArray[0] = 9,
            this.coinsArray[1] = 9,
            this.coinsArray[2] = 9,
            this.coinsArray[3] = 9;
            this.seteaHudCoins()
        },
        seteaHudCoins: function() {
            for (var t = 0,
            e = !1,
            i = 0; 4 > i; i++) {
                for (var s = 0; 10 > s; s++) this.assets.numerosCoins[i][s].parent == this.contenedorMaestro && this.sacaSprite(this.assets.numerosCoins[i][s], this.contenedorMaestro);
                0 == this.coinsArray[3 - i] && 0 == e && 3 > i ? t += 1 : this.coinsArray[3 - i] > 0 && (e = !0)
            }
            for (var i = 0; 4 - t > i; i++) {
                var a = this.coinsArray[i];
                this.agregaSprite(this.assets.numerosCoins[i][a], this.contenedorMaestro, 1, game.system.width - this.assets.numerosCoins[i][0].width - 7 - 14 * i, 6)
            }
        },
        creaMapaInicial: function(t, e, i, s) {
            for (var a = !1,
            r = 0; s > r; r++) {
                for (var n = 0; n < this.numClones; n++) this.rutaPj[n][r] = new Array,
                this.rutaPj[n][r][1] = new game.Point(0, 0),
                this.rutaPj[n][r][4] = new game.Point(0, 0);
                if (s > r) {
                    this.matrixGrilla[r] = new Array;
                    for (var o = 0; o < this.mapaColum; o++) {
                        if (this.matrixGrilla[r][o] = new Array, this.matrixGrilla[r][o][0] = new game.Point(o * this.cuadroHorizontal / 2, r * this.cuadroVertical / 2), this.matrixGrilla[r][o][1] = i[t][o], "E" == this.matrixGrilla[r][o][1]) this.tileEsCamino(this.matrixGrilla[r - 1][o + 1][1]) ? this.matrixGrilla[r][o][1] = 24 : this.tileEsCamino(this.matrixGrilla[r - 1][o - 1][1]) ? this.matrixGrilla[r][o][1] = 23 : this.matrixGrilla[r][o][1] = 22,
                        this.matrixGrilla[r][o][5] = this.tramosParams[t][o];
                        else if ("S" == this.matrixGrilla[r][o][1]) {
                            var h = t + 1;
                            h == i.length && (h = 0),
                            this.tileEsCamino(i[h][o - 1]) ? this.matrixGrilla[r][o][1] = 27 : this.tileEsCamino(i[h][o + 1]) ? this.matrixGrilla[r][o][1] = 26 : this.matrixGrilla[r][o][1] = 25
                        } else if ("J" == this.matrixGrilla[r][o][1]) {
                            var h = t + 1;
                            h == i.length && (h = 0),
                            this.tileEsCamino(this.matrixGrilla[r - 1][o + 1][1]) && !this.tileEsCamino(i[h][o]) ? this.matrixGrilla[r][o][1] = 30 : this.tileEsCamino(this.matrixGrilla[r - 1][o - 1][1]) && !this.tileEsCamino(i[h][o]) ? this.matrixGrilla[r][o][1] = 29 : this.matrixGrilla[r][o][1] = 28,
                            null != this.tramosParams[t] && null != this.tramosParams[t][o] && (this.matrixGrilla[r][o][5] = this.tramosParams[t][o])
                        }
                        if (this.matrixGrilla[r][o][1] >= 1 && this.matrixGrilla[r][o][1] <= 3) {
                            if (3 != this.matrixGrilla[r][o][1]) {
                                0 == a && (this.partida = new game.Point(r, o), a = !0);
                                var h = t + 2;
                                if (h == i.length ? h = 0 : h >= i.length && (h = 1), 1 == this.matrixGrilla[r][o][1] && 2 == i[h][o] && (this.matrixGrilla[r][o][1] = 53), 2 == this.matrixGrilla[r][o][1]) {
                                    h = t + 1,
                                    o > 0 && (2 == i[h][o - 1] || "E" == i[h][o - 1] || "J" == i[h][o - 1]) ? this.matrixGrilla[r][o][1] = 57 : o < i[h].length && (2 == i[h][o + 1] || "S" == i[h][o + 1] || "J" == i[h][o + 1]) && (this.matrixGrilla[r][o][1] = 58);
                                    var l = t - 2; - 1 == l ? l = i.length - 1 : -2 == l && (l = i.length - 2),
                                    h = t + 1,
                                    h == i.length && (h = 0),
                                    1 == i[l][o] ? (l = t + 1, l == i.length && (l = 0), o > 0 && 2 == i[l][o - 1] ? (this.matrixGrilla[r][o][1] = 56, e = "izq") : o < i[l].length && 2 == i[l][o + 1] ? (this.matrixGrilla[r][o][1] = 55, e = "der") : o > 0 && 3 == i[l][o - 1] ? (this.matrixGrilla[r][o][1] = 52, e = "izq") : o < i[l].length && 3 == i[l][o + 1] ? (this.matrixGrilla[r][o][1] = 51, e = "der") : 2 == i[t - 1][o - 1] && 1 == i[t + 1][o] && 0 == i[t - 1][o] ? this.matrixGrilla[r][o][1] = 52 : 2 == i[t - 1][o + 1] && 1 == i[t + 1][o] && 0 == i[t - 1][o] && (this.matrixGrilla[r][o][1] = 51)) : 1 == i[h][o] ? (("down" == e || "abajo" == e) && (o > 0 && 2 == i[t - 1][o - 1] && 1 != i[h][o] ? e = "der": o < i[h].length && 2 == i[t - 1][o + 1] && 1 != i[h][o] ? e = "izq": 2 == i[t - 1][o - 1] && 1 == i[h][o] ? (this.matrixGrilla[r][o][1] = 52, e = "down") : 2 == i[t - 1][o + 1] && 1 == i[h][o] ? (this.matrixGrilla[r][o][1] = 51, e = "down") : 3 == i[t - 1][o - 1] && 1 == i[h][o] ? (this.matrixGrilla[r][o][1] = 56, e = "down") : 3 == i[t - 1][o + 1] && 1 == i[h][o] && (this.matrixGrilla[r][o][1] = 55, e = "down")), "izq" == e ? (2 == i[t - 1][o - 1] && 1 == i[h][o] ? this.matrixGrilla[r][o][1] = 52 : this.matrixGrilla[r][o][1] = 51, e = "down") : "der" == e && (2 == i[t - 1][o + 1] && 1 == i[h][o] ? this.matrixGrilla[r][o][1] = 51 : this.matrixGrilla[r][o][1] = 52), e = "down") : o > 0 && 2 == i[h][o - 1] ? "der" == e && (e = "izq") : o < i[h].length && 2 == i[h][o + 1] && "izq" == e && (e = "der")
                                } else 53 == this.matrixGrilla[r][o][1] && (l = t + 2, l == i.length ? l = 0 : l > i.length && (l = 1), 2 == i[l][o] && (this.matrixGrilla[r][o][1] = 50));
                                var d = null;
                                if (r > 6 && s > r && o > 0 && o < this.matrixGrilla[r].length && 53 != this.matrixGrilla[r][o][1] && 51 != this.matrixGrilla[r][o][1] && 56 != this.matrixGrilla[r][o][1] && 51 != this.matrixGrilla[r][o][1] && 52 != this.matrixGrilla[r][o][1] && !this.tileEsJuntador(this.matrixGrilla[r - 1][o][1]) && !this.tileEsJuntador(i[t + 1][o + 1]) && !this.tileEsJuntador(i[t + 1][o - 1])) {
                                    var u = Math.ceil(20 * Math.random()); (1 == u || 4 == u || 9 == u || 15 == u || 19 == u || 14 == u) && (d = 41, this.matrixGrilla[r][o][8] = d)
                                }
                                if (72 > r) {
                                    var c = this.creaTile(this.matrixGrilla[r][o][1]);
                                    this.agregaSprite(c, this.contenedorMapa, 1, this.matrixGrilla[r][o][0].x, this.matrixGrilla[r][o][0].y, !1),
                                    null != this.matrixGrilla[r][o][8] && (this.matrixGrilla[r][o][8] = this.creaAsset(this.matrixGrilla[r][o][8]), this.agregaSprite(this.matrixGrilla[r][o][8][0], c, 1, this.matrixGrilla[r][o][8][1], this.matrixGrilla[r][o][8][2], !1)),
                                    this.matrixGrilla[r][o][2] = c
                                }
                            }
                        } else if (this.matrixGrilla[r][o][1] >= 4 && 72 > r) {
                            var d = this.creaAsset(this.matrixGrilla[r][o][1]),
                            c = d[0],
                            m = d[1],
                            p = d[2],
                            g = d[3];
                            0 == g ? c.addTo(this.contenedorBajoPersonaje) : 1 == g && c.addTo(this.contenedorSobrePersonaje),
                            c.position.set(this.matrixGrilla[r][o][0].x + m, this.matrixGrilla[r][o][0].y + p),
                            this.matrixGrilla[r][o][2] = c,
                            this.tileEsTorre(this.matrixGrilla[r][o][1]) ? (this.matrixGrilla[r][o][3] = d[4][1], this.agregaSprite(d[4][1], this.contenedorBajoPersonaje, 1, this.matrixGrilla[r][o][0].x + d[4][2], this.matrixGrilla[r][o][0].y + d[4][3])) : this.tileEsPortalEntrada(this.matrixGrilla[r][o][1]) || this.tileEsPortalSalida(this.matrixGrilla[r][o][1]) ? (this.matrixGrilla[r][o][3] = d[4][0], this.agregaSprite(d[4][0], this.contenedorMapa, 1, this.matrixGrilla[r][o][0].x + d[4][1], this.matrixGrilla[r][o][0].y + d[4][2]), this.matrixGrilla[r][o][9] = d[4][3], d[4][3].addTo(this.contenedorMapa), d[4][3].x = this.matrixGrilla[r][o][0].x + d[4][4], d[4][3].y = this.matrixGrilla[r][o][0].y + d[4][5], this.contenedorMapa.setChildIndex(d[4][3], 0)) : this.tileEsJuntador(this.matrixGrilla[r][o][1]) ? (this.matrixGrilla[r][o][3] = d[4][0], this.agregaSprite(d[4][0], this.contenedorMapa, 1, this.matrixGrilla[r][o][0].x + d[4][1], this.matrixGrilla[r][o][0].y + d[4][2])) : (this.tileEsPilarPajaro(this.matrixGrilla[r][o][1]) || this.tileEsHojasPajaro(this.matrixGrilla[r][o][1])) && (this.matrixGrilla[r][o][3] = d[4][0], this.agregaSprite(d[4][0], this.contenedorSobrePersonaje, d[4][3], this.matrixGrilla[r][o][0].x + d[4][1], this.matrixGrilla[r][o][0].y + d[4][2]))
                        }
                    }
                    t += 1,
                    t == i.length && (t = 0)
                }
            }
        },
        creaMapaDemo: function(t, e, i, s) {
            for (var a = !1,
            r = 0; s > r; r++) {
                this.matrixGrilla[r] = new Array;
                for (var n = 0; n < this.mapaColum; n++) {
                    if (this.matrixGrilla[r][n] = new Array, this.matrixGrilla[r][n][0] = new game.Point(n * this.cuadroHorizontal / 2, r * this.cuadroVertical / 2), this.matrixGrilla[r][n][1] = i[t][n], "E" == this.matrixGrilla[r][n][1]) this.tileEsCamino(this.matrixGrilla[r - 1][n + 1][1]) ? this.matrixGrilla[r][n][1] = 24 : this.tileEsCamino(this.matrixGrilla[r - 1][n - 1][1]) ? this.matrixGrilla[r][n][1] = 23 : this.matrixGrilla[r][n][1] = 22;
                    else if ("S" == this.matrixGrilla[r][n][1]) {
                        var o = t + 1;
                        o == i.length && (o = 0),
                        this.tileEsCamino(i[o][n - 1]) ? this.matrixGrilla[r][n][1] = 27 : this.tileEsCamino(i[o][n + 1]) ? this.matrixGrilla[r][n][1] = 26 : this.matrixGrilla[r][n][1] = 25
                    } else if ("J" == this.matrixGrilla[r][n][1]) {
                        var o = t + 1;
                        o == i.length && (o = 0),
                        this.tileEsCamino(this.matrixGrilla[r - 1][n + 1][1]) && !this.tileEsCamino(i[o][n]) ? this.matrixGrilla[r][n][1] = 30 : this.tileEsCamino(this.matrixGrilla[r - 1][n - 1][1]) && !this.tileEsCamino(i[o][n]) ? this.matrixGrilla[r][n][1] = 29 : this.matrixGrilla[r][n][1] = 28
                    }
                    if (this.matrixGrilla[r][n][1] >= 1 && this.matrixGrilla[r][n][1] <= 3) {
                        if (3 != this.matrixGrilla[r][n][1]) {
                            0 == a && (this.partida = new game.Point(r, n), a = !0);
                            var o = t + 2;
                            if (o == i.length ? o = 0 : o >= i.length && (o = 1), 1 == this.matrixGrilla[r][n][1] && 2 == i[o][n] && (this.matrixGrilla[r][n][1] = 53), 2 == this.matrixGrilla[r][n][1]) {
                                o = t + 1,
                                n > 0 && (2 == i[o][n - 1] || "E" == i[o][n - 1] || "J" == i[o][n - 1]) ? this.matrixGrilla[r][n][1] = 57 : n < i[o].length && (2 == i[o][n + 1] || "S" == i[o][n + 1] || "J" == i[o][n + 1]) && (this.matrixGrilla[r][n][1] = 58);
                                var h = t - 2; - 1 == h ? h = i.length - 1 : -2 == h && (h = i.length - 2),
                                o = t + 1,
                                o == i.length && (o = 0),
                                1 == i[h][n] ? (h = t + 1, h == i.length && (h = 0), n > 0 && 2 == i[h][n - 1] ? (this.matrixGrilla[r][n][1] = 56, e = "izq") : n < i[h].length && 2 == i[h][n + 1] ? (this.matrixGrilla[r][n][1] = 55, e = "der") : n > 0 && 3 == i[h][n - 1] ? (this.matrixGrilla[r][n][1] = 52, e = "izq") : n < i[h].length && 3 == i[h][n + 1] ? (this.matrixGrilla[r][n][1] = 51, e = "der") : 2 == i[t - 1][n - 1] && 1 == i[t + 1][n] && 0 == i[t - 1][n] ? this.matrixGrilla[r][n][1] = 52 : 2 == i[t - 1][n + 1] && 1 == i[t + 1][n] && 0 == i[t - 1][n] && (this.matrixGrilla[r][n][1] = 51)) : 1 == i[o][n] ? (("down" == e || "abajo" == e) && (n > 0 && 2 == i[t - 1][n - 1] && 1 != i[o][n] ? e = "der": n < i[o].length && 2 == i[t - 1][n + 1] && 1 != i[o][n] ? e = "izq": 2 == i[t - 1][n - 1] && 1 == i[o][n] ? (this.matrixGrilla[r][n][1] = 52, e = "down") : 2 == i[t - 1][n + 1] && 1 == i[o][n] ? (this.matrixGrilla[r][n][1] = 51, e = "down") : 3 == i[t - 1][n - 1] && 1 == i[o][n] ? (this.matrixGrilla[r][n][1] = 56, e = "down") : 3 == i[t - 1][n + 1] && 1 == i[o][n] && (this.matrixGrilla[r][n][1] = 55, e = "down")), "izq" == e ? (2 == i[t - 1][n - 1] && 1 == i[o][n] ? this.matrixGrilla[r][n][1] = 52 : this.matrixGrilla[r][n][1] = 51, e = "down") : "der" == e && (2 == i[t - 1][n + 1] && 1 == i[o][n] ? this.matrixGrilla[r][n][1] = 51 : this.matrixGrilla[r][n][1] = 52), e = "down") : n > 0 && 2 == i[o][n - 1] ? "der" == e && (e = "izq") : n < i[o].length && 2 == i[o][n + 1] && "izq" == e && (e = "der")
                            } else 53 == this.matrixGrilla[r][n][1] && (h = t + 2, h == i.length ? h = 0 : h > i.length && (h = 1), 2 == i[h][n] && (this.matrixGrilla[r][n][1] = 50));
                            var l = null;
                            if (r > 6 && s > r && n > 0 && n < this.matrixGrilla[r].length && 53 != this.matrixGrilla[r][n][1] && 51 != this.matrixGrilla[r][n][1] && 56 != this.matrixGrilla[r][n][1] && 51 != this.matrixGrilla[r][n][1] && 52 != this.matrixGrilla[r][n][1] && !this.tileEsJuntador(this.matrixGrilla[r - 1][n][1]) && !this.tileEsJuntador(i[t + 1][n + 1]) && !this.tileEsJuntador(i[t + 1][n - 1])) {
                                var d = Math.ceil(20 * Math.random()); (1 == d || 4 == d || 9 == d || 15 == d || 19 == d || 14 == d) && (l = 41, this.matrixGrilla[r][n][8] = l)
                            }
                            if (72 > r) {
                                var u = this.creaTile(this.matrixGrilla[r][n][1]);
                                this.agregaSprite(u, this.contenedorMapa, 1, this.matrixGrilla[r][n][0].x, this.matrixGrilla[r][n][0].y, !1),
                                null != this.matrixGrilla[r][n][8] && (this.matrixGrilla[r][n][8] = this.creaAsset(this.matrixGrilla[r][n][8]), this.agregaSprite(this.matrixGrilla[r][n][8][0], u, 1, this.matrixGrilla[r][n][8][1], this.matrixGrilla[r][n][8][2], !1)),
                                this.matrixGrilla[r][n][2] = u
                            }
                        }
                    } else if (this.matrixGrilla[r][n][1] >= 4 && 72 > r) {
                        var l = this.creaAsset(this.matrixGrilla[r][n][1]),
                        u = l[0],
                        c = l[1],
                        m = l[2],
                        p = l[3];
                        0 == p ? u.addTo(this.contenedorBajoPersonaje) : 1 == p && u.addTo(this.contenedorSobrePersonaje),
                        u.position.set(this.matrixGrilla[r][n][0].x + c, this.matrixGrilla[r][n][0].y + m),
                        this.matrixGrilla[r][n][2] = u,
                        this.tileEsTorre(this.matrixGrilla[r][n][1]) ? (this.matrixGrilla[r][n][3] = l[4][1], this.agregaSprite(l[4][1], this.contenedorBajoPersonaje, 1, this.matrixGrilla[r][n][0].x + l[4][2], this.matrixGrilla[r][n][0].y + l[4][3])) : this.tileEsPortalEntrada(this.matrixGrilla[r][n][1]) || this.tileEsPortalSalida(this.matrixGrilla[r][n][1]) ? (this.matrixGrilla[r][n][3] = l[4][0], this.agregaSprite(l[4][0], this.contenedorMapa, 1, this.matrixGrilla[r][n][0].x + l[4][1], this.matrixGrilla[r][n][0].y + l[4][2]), this.matrixGrilla[r][n][9] = l[4][3], l[4][3].addTo(this.contenedorMapa), l[4][3].x = this.matrixGrilla[r][n][0].x + l[4][4], l[4][3].y = this.matrixGrilla[r][n][0].y + l[4][5], this.contenedorMapa.setChildIndex(l[4][3], 0)) : this.tileEsJuntador(this.matrixGrilla[r][n][1]) ? (this.matrixGrilla[r][n][3] = l[4][0], this.agregaSprite(l[4][0], this.contenedorMapa, 1, this.matrixGrilla[r][n][0].x + l[4][1], this.matrixGrilla[r][n][0].y + l[4][2])) : (this.tileEsPilarPajaro(this.matrixGrilla[r][n][1]) || this.tileEsHojasPajaro(this.matrixGrilla[r][n][1])) && (this.matrixGrilla[r][n][3] = l[4][0], this.agregaSprite(l[4][0], this.contenedorSobrePersonaje, l[4][3], this.matrixGrilla[r][n][0].x + l[4][1], this.matrixGrilla[r][n][0].y + l[4][2]))
                    }
                }
                t += 1,
                t == i.length && (t = 0)
            }
            this.creaPlayerMatrixDemo(!0, i.length)
        },
        creaMundo: function() {
            for (var t = 0; t < this.numClones; t++) this.personaje[t] = this.assets.chars[this.personajeElegido][t],
            this.sombra[t] = this.assets.sombra[this.personajeElegido][t];
            var e = this.Tramos.getTramo(this.tramoUsado),
            i = e[0];
            this.tramoUsado = e[1],
            this.tramosParams = e[2];
            for (var t = 0; t <= this.numClones; t++) this.rutaPj[t] = new Array;
            this.creaMapaInicial(0, "abajo", i, i.length),
            this.personajeElegido > 0 ? (this.YChar = this.YChar - 1, this.YSalto = this.YSalto + 4) : (this.YChar = this.YChar + 2, this.YSalto = this.YSalto + 4);
            for (var t = 0; t < this.numClones; t++) {
                var s = !1;
                for (0 == t && (s = !0); this.contenedorPersonaje[t].children.length > 0;) this.sacaSprite(this.contenedorPersonaje[t].getChildAt(0), this.contenedorPersonaje[t]);
                for (this.agregaSprite(this.contenedorPersonaje[t], this.contenedorInGame, 1, this.matrixGrilla[this.partida.x][this.partida.y][0].x, this.matrixGrilla[this.partida.x][this.partida.y][0].y, !1, s), this.agregaSprite(this.sombra[t][0], this.contenedorPersonaje[t], 1, 5, 5, !1), this.sombra[t][0].visible = !0, 0 == this.personajeElegido ? this.agregaSprite(this.contenedorPj[t], this.contenedorPersonaje[t], 1, -14.5, this.YChar, !1) : this.agregaSprite(this.contenedorPj[t], this.contenedorPersonaje[t], 1, -21, this.YChar, !1); this.contenedorPj[t].children.length > 0;) this.sacaSprite(this.contenedorPj[t].getChildAt(0), this.contenedorPj[t]);
                this.agregaSprite(this.personaje[t][0], this.contenedorPj[t], 1, 0, 0, !1, !1),
                this.agregaSprite(this.personaje[t][2], this.contenedorPj[t], 1, 0, 0, !1, !1),
                this.personaje[t][1].scale.set( - 1, 1),
                this.personaje[t][3].scale.set( - 1, 1),
                this.personaje[t][1].addTo(this.contenedorPj[t]),
                0 == this.personajeElegido ? (this.personaje[t][1].x = 70, this.personaje[t][1].y = -2, this.personaje[t][3].addTo(this.contenedorPj[t]), this.personaje[t][3].x = 70, this.personaje[t][3].y = -2) : (this.personaje[t][1].x = 83, this.personaje[t][1].y = -1, this.personaje[t][3].addTo(this.contenedorPj[t]), this.personaje[t][3].x = 84, this.personaje[t][3].y = -1),
                this.personaje[t][1].visible = !1,
                this.personaje[t][3].visible = !1
            }
            this.agregaSprite(this.contenedorTargetCamara, this.contenedorInGame, 1, this.matrixGrilla[this.partida.x][this.partida.y][0].x, this.matrixGrilla[this.partida.x][this.partida.y][0].y, !1),
            this.agregaSprite(this.contenedorSobrePersonaje, this.contenedorInGame, 1, 0, 0, !1),
            this.creaPlayerMatrix(!0, i.length),
            this.camara.offset = new game.Point(this.rutaPj[0][12][0].x, this.rutaPj[0][12][0].y - (this.canvasHeight - game.system.height) / 2),
            this.camara.addTo(this.contenedorInGame),
            this.camara.position.set(0, 0),
            this.camara.setTarget(this.contenedorTargetCamara);
            var a, r, n = Math.abs(this.contenedorPersonaje[0].x - this.rutaPj[0][1][0].x),
            o = Math.abs(this.contenedorPersonaje[0].y - this.rutaPj[0][1][0].y);
            0 == n ? r = o / this.speed: 0 == o ? r = n / this.speed: (a = Math.sqrt(Math.pow(n, 2) + Math.pow(o, 2)), r = a / this.speed);
            for (var t = 0; t <= this.numClones; t++) this.tweensPersonaje[t] = new Array;
            this.contenedorInGame.y = 0,
            this.contenedorGame.pivot.set(this.contenedorPersonaje[0].x + this.contenedorInGame.x, this.contenedorPersonaje[0].y + this.contenedorInGame.y),
            this.contenedorGame.position.set(this.contenedorPersonaje[0].x + this.contenedorInGame.x, this.contenedorPersonaje[0].y + this.contenedorInGame.y),
            this.contenedorGame.scale.set(1.6, 1.6),
            this.creaTweenScale(this.contenedorGame, 1.6, 1, 1800, game.Tween.Easing.Sinusoidal.Out),
            this.seteaAnimPj(1, 0),
            this.tweensPersonaje[0][1] = this.creaTween(this.contenedorPersonaje[0], this.contenedorPersonaje[0].x, this.rutaPj[0][1][0].x, this.contenedorPersonaje[0].y, this.rutaPj[0][1][0].y, r, game.Tween.Easing.Linear.None, this.muevePersonaje.bind(this, 1), this.mueveTargetCamara.bind(this, 0), !0)
        },
        llamaAccion: function(t, e) {
            this.addTimer(t, e)
        },
        averiguaDireccion: function(t, e) {
            var i = this.rutaPj[e][t - 1][1].y,
            s = (this.rutaPj[e][t - 1][1].x, this.rutaPj[e][t][1].y);
            this.rutaPj[e][t][1].x;
            return i > s ? "izq": s == i ? "down": s > i ? "der": -1
        },
        seteaAnimPj: function(t, e) {
            var i = this.averiguaDireccion(t, e);
            if (0 != this.gameOver) return 0;
            if ("FXfusion" == this.personaje[e][2].currentAnim) return 0;
            switch (i) {
            case "down":
                if ("" == this.currentAnim[e]) this.currentAnim[e] = "correr",
                this.personaje[e][0].play("correr", 0),
                this.personaje[e][2].play("correr", 0),
                this.personaje[e][0].visible = !0,
                this.personaje[e][2].visible = !0,
                this.personaje[e][1].visible = !1,
                this.personaje[e][3].visible = !1;
                else if ("correrIzq" == this.currentAnim[e]) if (this.currentAnim[e] = "correr", this.personaje[e][0].play("correr", 0), "saltoIzq" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "salto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else if ("doblesaltoIzq" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "doblesalto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else this.personaje[e][2].play("giroCabezaIzqCentro", 0),
                this.personaje[e][2].anims.giroCabezaIzqCentro.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, e)),
                this.personaje[e][0].visible = !0,
                this.personaje[e][2].visible = !0,
                this.personaje[e][1].visible = !1,
                this.personaje[e][3].visible = !1;
                else if ("correrDer" == this.currentAnim[e]) if (this.currentAnim[e] = "correr", this.personaje[e][0].play("correr", 0), "saltoDer" == this.personaje[e][3].currentAnim) {
                    var s = this.personaje[e][3].currentFrame;
                    this.setAnimSaltoPj(e, "salto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else if ("doblesaltoDer" == this.personaje[e][3].currentAnim) {
                    var s = this.personaje[e][3].currentFrame;
                    this.setAnimSaltoPj(e, "doblesalto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else this.personaje[e][3].play("giroCabezaDerCentro", 0),
                this.personaje[e][3].anims.giroCabezaDerCentro.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, e)),
                this.personaje[e][0].visible = !0,
                this.personaje[e][2].visible = !1,
                this.personaje[e][1].visible = !1,
                this.personaje[e][3].visible = !0;
                break;
            case "izq":
                if ("" == this.currentAnim[e]) this.currentAnim[e] = "correrIzq",
                this.personaje[e][0].play("correrIzq", 0),
                this.personaje[e][2].play("correrIzq", 0),
                this.personaje[e][0].visible = !0,
                this.personaje[e][2].visible = !0,
                this.personaje[e][1].visible = !1,
                this.personaje[e][3].visible = !1;
                else if ("correrDer" == this.currentAnim[e]) if (this.currentAnim[e] = "correrIzq", this.personaje[e][0].play("correrIzq", 0), "saltoDer" == this.personaje[e][3].currentAnim) {
                    var s = this.personaje[e][3].currentFrame;
                    this.setAnimSaltoPj(e, "salto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else if ("doblesaltoDer" == this.personaje[e][3].currentAnim) {
                    var s = this.personaje[e][3].currentFrame;
                    this.setAnimSaltoPj(e, "doblesalto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else this.personaje[e][3].play("giroCabezaDerIzq", 0),
                this.personaje[e][3].anims.giroCabezaDerIzq.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, e)),
                this.personaje[e][0].visible = !0,
                this.personaje[e][2].visible = !1,
                this.personaje[e][1].visible = !1,
                this.personaje[e][3].visible = !0;
                else if ("correr" == this.currentAnim[e]) if (this.currentAnim[e] = "correrIzq", this.personaje[e][0].play("correrIzq", 0), "salto" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "salto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else if ("doblesalto" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "doblesalto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !0,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !1
                } else this.personaje[e][2].play("giroCabezaCentroIzq", 0),
                this.personaje[e][2].anims.giroCabezaCentroIzq.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, e)),
                this.personaje[e][0].visible = !0,
                this.personaje[e][2].visible = !0,
                this.personaje[e][1].visible = !1,
                this.personaje[e][3].visible = !1;
                break;
            case "der":
                if ("" == this.currentAnim[e]) this.currentAnim[e] = "correrDer",
                this.personaje[e][1].play("correrDer", 0),
                this.personaje[e][3].play("correrDer", 0),
                this.personaje[e][1].visible = !0,
                this.personaje[e][3].visible = !0,
                this.personaje[e][0].visible = !1,
                this.personaje[e][2].visible = !1;
                else if ("correrIzq" == this.currentAnim[e]) if (this.currentAnim[e] = "correrDer", this.personaje[e][1].play("correrDer", 0), "saltoIzq" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "salto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !1,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !0
                } else if ("doblesaltoIzq" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "doblesalto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !1,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !0
                } else this.personaje[e][2].play("giroCabezaIzqDer", 0),
                this.personaje[e][2].anims.giroCabezaIzqDer.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, e)),
                this.personaje[e][0].visible = !1,
                this.personaje[e][2].visible = !0,
                this.personaje[e][1].visible = !0,
                this.personaje[e][3].visible = !1;
                else if ("correr" == this.currentAnim[e]) if (this.currentAnim[e] = "correrDer", this.personaje[e][1].play("correrDer", 0), "salto" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "salto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !1,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !0
                } else if ("doblesalto" == this.personaje[e][2].currentAnim) {
                    var s = this.personaje[e][2].currentFrame;
                    this.setAnimSaltoPj(e, "doblesalto", s),
                    this.personaje[e][0].visible = !1,
                    this.personaje[e][2].visible = !1,
                    this.personaje[e][1].visible = !1,
                    this.personaje[e][3].visible = !0
                } else this.personaje[e][3].play("giroCabezaCentroDer", 0),
                this.personaje[e][3].anims.giroCabezaCentroDer.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, e)),
                this.personaje[e][0].visible = !1,
                this.personaje[e][2].visible = !1,
                this.personaje[e][1].visible = !0,
                this.personaje[e][3].visible = !0
            }
        },
        setAnimPj: function(t) {
            if (0 != this.gameOver) return 0;
            if ("FXfusion" == this.personaje[t][2].currentAnim) return 0;
            switch (this.currentAnim[t]) {
            case "correrIzq":
                this.personaje[t][3].visible = !1,
                this.personaje[t][1].visible = !1,
                this.personaje[t][2].visible = !0,
                this.personaje[t][0].visible = !0,
                this.personaje[t][2].play("correrIzq", 0);
                break;
            case "correr":
                this.personaje[t][3].visible = !1,
                this.personaje[t][1].visible = !1,
                this.personaje[t][2].visible = !0,
                this.personaje[t][0].visible = !0,
                this.personaje[t][2].play("correr", 0);
                break;
            case "correrDer":
                this.personaje[t][2].visible = !1,
                this.personaje[t][0].visible = !1,
                this.personaje[t][3].visible = !0,
                this.personaje[t][1].visible = !0,
                this.personaje[t][3].play("correrDer", 0)
            }
        },
        setAnimSaltoPj: function(t, e, i) {
            if (0 != this.gameOver) return 0;
            if ("FXfusion" == this.personaje[t][2].currentAnim) return 0;
            switch (e) {
            case "salto":
                switch (this.currentAnim[t]) {
                case "correrIzq":
                    this.personaje[t][0].visible = !1,
                    this.personaje[t][2].play("saltoIzq", i);
                    break;
                case "correr":
                    this.personaje[t][0].visible = !1,
                    this.personaje[t][2].play("salto", i);
                    break;
                case "correrDer":
                    this.personaje[t][1].visible = !1,
                    this.personaje[t][3].play("saltoDer", i)
                }
                break;
            case "doblesalto":
                switch (this.currentAnim[t]) {
                case "correrIzq":
                    this.personaje[t][2].play("doblesaltoIzq", i);
                    break;
                case "correr":
                    this.personaje[t][2].play("doblesalto", i);
                    break;
                case "correrDer":
                    this.personaje[t][3].play("doblesaltoDer", i)
                }
                break;
            case "aterriza":
                if ( - 1 != this.estadoSalto[t]) switch (this.currentAnim[t]) {
                case "correrIzq":
                    this.personaje[t][2].play("aterrizaIzq", 0),
                    this.personaje[t][2].anims.aterrizaIzq.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, t));
                    break;
                case "correr":
                    this.personaje[t][2].play("aterriza", 0),
                    this.personaje[t][2].anims.aterriza.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, t));
                    break;
                case "correrDer":
                    this.personaje[t][3].play("aterrizaDer", 0),
                    this.personaje[t][3].anims.aterrizaDer.onComplete = this.llamaAccion.bind(this, 30, this.setAnimPj.bind(this, t))
                }
            }
        },
        tileVacio: function(t) {
            switch (t) {
            case 0:
            case 11:
            case 12:
            case 16:
            case 17:
            case 18:
            case 33:
            case 34:
            case 35:
            case 36:
            case 37:
            case 38:
            case 19:
            case 20:
            case 21:
            case 4:
            case 5:
            case 13:
            case 14:
            case 6:
            case 7:
            case 39:
            case 40:
            case 8:
            case 10:
            case 9:
            case 31:
            case 32:
            case 15:
                return ! 0
            }
            return ! 1
        },
        tileEsCamino: function(t) {
            return 1 == t || 2 == t || t >= 50 && 60 >= t ? !0 : !1
        },
        tileEsTorre: function(t) {
            return 9 == t || 31 == t || 32 == t ? !0 : !1
        },
        tileEsHojasPajaro: function(t) {
            return 11 == t || 12 == t ? !0 : !1
        },
        tileEsTorrePajaro: function(t) {
            return 31 == t || 32 == t ? !0 : !1
        },
        tileEsPortalEntrada: function(t) {
            return t >= 22 && 24 >= t || "E" == t ? !0 : !1
        },
        tileEsPortalSalida: function(t) {
            return t >= 25 && 27 >= t || "S" == t ? !0 : !1
        },
        tileEsJuntador: function(t) {
            return t >= 28 && 30 >= t || "J" == t ? !0 : !1
        },
        tileEsPilarPajaro: function(t) {
            return t >= 33 && 38 >= t ? !0 : !1
        },
        tileEsAgua: function(t) {
            return 3 == t ? !0 : !1
        },
        tileEsTuberiaPajaro: function(t) {
            return 14 == t || 13 == t ? !0 : !1
        },
        tileEsEscaleraPajaro: function(t) {
            return 39 == t || 40 == t ? !0 : !1
        },
        tileEsGate: function(t) {
            return 20 == t || 21 == t ? !0 : !1
        },
        agregaFilas: function(t, e, i, s, a, r) {
            var n = e,
            o = t;
            this.matrixGrilla[o] = new Array;
            for (var h = 0; h < this.numClones; h++) this.rutaPj[h][o] = new Array,
            this.rutaPj[h][o][1] = new game.Point(0, 0),
            this.rutaPj[h][o][4] = new game.Point(0, 0);
            for (var l = 0; l < this.mapaColum; l++) {
                if (this.matrixGrilla[o][l] = new Array, this.matrixGrilla[o][l][0] = new game.Point(l * this.cuadroHorizontal / 2, o * this.cuadroVertical / 2), this.matrixGrilla[o][l][1] = s[n][l], "E" == this.matrixGrilla[o][l][1]) this.tileEsCamino(this.matrixGrilla[o - 1][l + 1][1]) ? this.matrixGrilla[o][l][1] = 24 : this.tileEsCamino(this.matrixGrilla[o - 1][l - 1][1]) ? this.matrixGrilla[o][l][1] = 23 : this.matrixGrilla[o][l][1] = 22,
                this.matrixGrilla[o][l][5] = this.tramosParams[n][l];
                else if ("S" == this.matrixGrilla[o][l][1]) {
                    var d = n + 1;
                    d == s.length && (d = 0),
                    this.tileEsCamino(s[d][l - 1]) ? this.matrixGrilla[o][l][1] = 27 : this.tileEsCamino(s[d][l + 1]) ? this.matrixGrilla[o][l][1] = 26 : this.matrixGrilla[o][l][1] = 25
                } else if ("J" == this.matrixGrilla[o][l][1]) {
                    var d = n + 1;
                    d == s.length && (d = 0),
                    this.tileEsCamino(this.matrixGrilla[o - 1][l + 1][1]) && !this.tileEsCamino(s[d][l]) ? this.matrixGrilla[o][l][1] = 30 : this.tileEsCamino(this.matrixGrilla[o - 1][l - 1][1]) && !this.tileEsCamino(s[d][l]) ? this.matrixGrilla[o][l][1] = 29 : this.matrixGrilla[o][l][1] = 28,
                    null != this.tramosParams[n] && null != this.tramosParams[n][l] && (this.matrixGrilla[o][l][5] = this.tramosParams[n][l])
                }
                if (this.matrixGrilla[o][l][1] >= 1 && this.matrixGrilla[o][l][1] <= 3) {
                    if (3 != this.matrixGrilla[o][l][1]) {
                        var d = n + 2;
                        if (d == s.length ? d = 0 : d >= s.length && (d = 1), 1 == this.matrixGrilla[o][l][1] && 2 == s[d][l] && (this.matrixGrilla[o][l][1] = 53), 2 == this.matrixGrilla[o][l][1]) {
                            d = n + 1,
                            l > 0 && (2 == s[d][l - 1] || "E" == s[d][l - 1] || "J" == s[d][l - 1]) ? this.matrixGrilla[o][l][1] = 57 : l < s[d].length && (2 == s[d][l + 1] || "S" == s[d][l + 1] || "J" == s[d][l + 1]) && (this.matrixGrilla[o][l][1] = 58);
                            var u = n - 2; - 1 == u ? u = s.length - 1 : -2 == u && (u = s.length - 2),
                            d = n + 1,
                            d == s.length && (d = 0),
                            1 == s[u][l] ? (u = n + 1, u == s.length && (u = 0), l > 0 && 2 == s[u][l - 1] ? (this.matrixGrilla[o][l][1] = 56, i = "izq") : l < s[u].length && 2 == s[u][l + 1] ? (this.matrixGrilla[o][l][1] = 55, i = "der") : l > 0 && 3 == s[u][l - 1] ? (this.matrixGrilla[o][l][1] = 52, i = "izq") : l < s[u].length && 3 == s[u][l + 1] ? (this.matrixGrilla[o][l][1] = 51, i = "der") : 2 == s[n - 1][l - 1] && 1 == s[n + 1][l] && 0 == s[n - 1][l] ? this.matrixGrilla[o][l][1] = 52 : 2 == s[n - 1][l + 1] && 1 == s[n + 1][l] && 0 == s[n - 1][l] && (this.matrixGrilla[o][l][1] = 51)) : 1 == s[d][l] ? (("down" == i || "abajo" == i) && (l > 0 && 2 == s[n - 1][l - 1] && 1 != s[d][l] ? i = "der": l < s[d].length && 2 == s[n - 1][l + 1] && 1 != s[d][l] ? i = "izq": 2 == s[n - 1][l - 1] && 1 == s[d][l] ? (this.matrixGrilla[o][l][1] = 52, i = "down") : 2 == s[n - 1][l + 1] && 1 == s[d][l] ? (this.matrixGrilla[o][l][1] = 51, i = "down") : 3 == s[n - 1][l - 1] && 1 == s[d][l] ? (this.matrixGrilla[o][l][1] = 56, i = "down") : 3 == s[n - 1][l + 1] && 1 == s[d][l] && (this.matrixGrilla[o][l][1] = 55, i = "down")), "izq" == i ? (2 == s[n - 1][l - 1] && 1 == s[d][l] ? this.matrixGrilla[o][l][1] = 52 : this.matrixGrilla[o][l][1] = 51, i = "down") : "der" == i && (2 == s[n - 1][l + 1] && 1 == s[d][l] ? this.matrixGrilla[o][l][1] = 51 : this.matrixGrilla[o][l][1] = 52), i = "down") : l > 0 && 2 == s[d][l - 1] ? "der" == i && (i = "izq") : l < s[d].length && 2 == s[d][l + 1] && "izq" == i && (i = "der")
                        } else 53 == this.matrixGrilla[o][l][1] && (u = n + 2, u == s.length ? u = 0 : u > s.length && (u = 1), 2 == s[u][l] && (this.matrixGrilla[o][l][1] = 50));
                        var c = null;
                        if (o > 6 && o < a + s.length && l > 0 && l < this.matrixGrilla[o].length && 53 != this.matrixGrilla[o][l][1] && 51 != this.matrixGrilla[o][l][1] && 56 != this.matrixGrilla[o][l][1] && 51 != this.matrixGrilla[o][l][1] && 52 != this.matrixGrilla[o][l][1] && !this.tileEsJuntador(this.matrixGrilla[o - 1][l][1]) && !this.tileEsJuntador(s[n + 1][l + 1]) && !this.tileEsJuntador(s[n + 1][l - 1])) {
                            var m = Math.ceil(20 * Math.random()); (1 == m || 4 == m || 9 == m || 15 == m || 19 == m || 14 == m) && (c = 41, this.matrixGrilla[o][l][8] = c)
                        }
                        if (72 > o) {
                            var p = this.creaTile(this.matrixGrilla[o][l][1]);
                            this.agregaSprite(p, this.contenedorMapa, 1, this.matrixGrilla[o][l][0].x, this.matrixGrilla[o][l][0].y, !1),
                            null != this.matrixGrilla[o][l][8] && (this.matrixGrilla[o][l][8] = this.creaAsset(this.matrixGrilla[o][l][8]), this.agregaSprite(this.matrixGrilla[o][l][8][0], p, 1, this.matrixGrilla[o][l][8][1], this.matrixGrilla[o][l][8][2], !1)),
                            this.matrixGrilla[o][l][2] = p
                        }
                    }
                } else if (this.matrixGrilla[o][l][1] >= 4 && 72 > o) {
                    var c = this.creaAsset(this.matrixGrilla[o][l][1]),
                    p = c[0],
                    g = c[1],
                    f = c[2],
                    v = c[3];
                    0 == v ? p.addTo(this.contenedorBajoPersonaje) : 1 == v && p.addTo(this.contenedorSobrePersonaje),
                    p.position.set(this.matrixGrilla[o][l][0].x + g, this.matrixGrilla[o][l][0].y + f),
                    this.matrixGrilla[o][l][2] = p,
                    this.tileEsTorre(this.matrixGrilla[o][l][1]) ? (this.matrixGrilla[o][l][3] = c[4][1], this.agregaSprite(c[4][1], this.contenedorBajoPersonaje, 1, this.matrixGrilla[o][l][0].x + c[4][2], this.matrixGrilla[o][l][0].y + c[4][3])) : this.tileEsPortalEntrada(this.matrixGrilla[o][l][1]) || this.tileEsPortalSalida(this.matrixGrilla[o][l][1]) ? (this.matrixGrilla[o][l][3] = c[4][0], this.agregaSprite(c[4][0], this.contenedorMapa, 1, this.matrixGrilla[o][l][0].x + c[4][1], this.matrixGrilla[o][l][0].y + c[4][2]), this.matrixGrilla[o][l][9] = c[4][3], c[4][3].addTo(this.contenedorMapa), c[4][3].x = this.matrixGrilla[o][l][0].x + c[4][4], c[4][3].y = this.matrixGrilla[o][l][0].y + c[4][5], this.contenedorMapa.setChildIndex(c[4][3], 0)) : this.tileEsJuntador(this.matrixGrilla[o][l][1]) ? (this.matrixGrilla[o][l][3] = c[4][0], this.agregaSprite(c[4][0], this.contenedorMapa, 1, this.matrixGrilla[o][l][0].x + c[4][1], this.matrixGrilla[o][l][0].y + c[4][2])) : (this.tileEsPilarPajaro(this.matrixGrilla[o][l][1]) || this.tileEsHojasPajaro(this.matrixGrilla[o][l][1])) && (this.matrixGrilla[o][l][3] = c[4][0], this.agregaSprite(c[4][0], this.contenedorSobrePersonaje, c[4][3], this.matrixGrilla[o][l][0].x + c[4][1], this.matrixGrilla[o][l][0].y + c[4][2]))
                }
            }
            n += 1,
            t += 1,
            n == s.length ? (this.creaPlayerMatrix(!1, a, r), this.indexDelay <= this.delayInicial && (this.indexDelay = this.delayInicial + 1)) : this.indexDelay <= this.delayInicial ? this.agregaFilas(t, n, i, s, a, r) : this.agregaFilas(t, n, i, s, a, r)
        },
        agregaFilasDemo: function(t, e, i, s, a) {
            var r = e,
            n = t;
            this.matrixGrilla[n] = new Array;
            for (var o = 0; o < this.mapaColum; o++) {
                if (this.matrixGrilla[n][o] = new Array, this.matrixGrilla[n][o][0] = new game.Point(o * this.cuadroHorizontal / 2, n * this.cuadroVertical / 2), this.matrixGrilla[n][o][1] = s[r][o], "E" == this.matrixGrilla[n][o][1]) this.tileEsCamino(this.matrixGrilla[n - 1][o + 1][1]) ? this.matrixGrilla[n][o][1] = 24 : this.tileEsCamino(this.matrixGrilla[n - 1][o - 1][1]) ? this.matrixGrilla[n][o][1] = 23 : this.matrixGrilla[n][o][1] = 22,
                this.matrixGrilla[n][o][5] = this.tramosParams[r][o];
                else if ("S" == this.matrixGrilla[n][o][1]) {
                    var h = r + 1;
                    h == s.length && (h = 0),
                    this.tileEsCamino(s[h][o - 1]) ? this.matrixGrilla[n][o][1] = 27 : this.tileEsCamino(s[h][o + 1]) ? this.matrixGrilla[n][o][1] = 26 : this.matrixGrilla[n][o][1] = 25
                } else if ("J" == this.matrixGrilla[n][o][1]) {
                    var h = r + 1;
                    h == s.length && (h = 0),
                    this.tileEsCamino(this.matrixGrilla[n - 1][o + 1][1]) && !this.tileEsCamino(s[h][o]) ? this.matrixGrilla[n][o][1] = 30 : this.tileEsCamino(this.matrixGrilla[n - 1][o - 1][1]) && !this.tileEsCamino(s[h][o]) ? this.matrixGrilla[n][o][1] = 29 : this.matrixGrilla[n][o][1] = 28,
                    null != this.tramosParams[r] && null != this.tramosParams[r][o] && (this.matrixGrilla[n][o][5] = this.tramosParams[r][o])
                }
                if (this.matrixGrilla[n][o][1] >= 1 && this.matrixGrilla[n][o][1] <= 3) {
                    if (3 != this.matrixGrilla[n][o][1]) {
                        var h = r + 2;
                        if (h == s.length ? h = 0 : h >= s.length && (h = 1), 1 == this.matrixGrilla[n][o][1] && 2 == s[h][o] && (this.matrixGrilla[n][o][1] = 53), 2 == this.matrixGrilla[n][o][1]) {
                            h = r + 1,
                            o > 0 && (2 == s[h][o - 1] || "E" == s[h][o - 1] || "J" == s[h][o - 1]) ? this.matrixGrilla[n][o][1] = 57 : o < s[h].length && (2 == s[h][o + 1] || "S" == s[h][o + 1] || "J" == s[h][o + 1]) && (this.matrixGrilla[n][o][1] = 58);
                            var l = r - 2; - 1 == l ? l = s.length - 1 : -2 == l && (l = s.length - 2),
                            h = r + 1,
                            h == s.length && (h = 0),
                            1 == s[l][o] ? (l = r + 1, l == s.length && (l = 0), o > 0 && 2 == s[l][o - 1] ? (this.matrixGrilla[n][o][1] = 56, i = "izq") : o < s[l].length && 2 == s[l][o + 1] ? (this.matrixGrilla[n][o][1] = 55, i = "der") : o > 0 && 3 == s[l][o - 1] ? (this.matrixGrilla[n][o][1] = 52, i = "izq") : o < s[l].length && 3 == s[l][o + 1] ? (this.matrixGrilla[n][o][1] = 51, i = "der") : 2 == s[r - 1][o - 1] && 1 == s[r + 1][o] && 0 == s[r - 1][o] ? this.matrixGrilla[n][o][1] = 52 : 2 == s[r - 1][o + 1] && 1 == s[r + 1][o] && 0 == s[r - 1][o] && (this.matrixGrilla[n][o][1] = 51)) : 1 == s[h][o] ? (("down" == i || "abajo" == i) && (o > 0 && 2 == s[r - 1][o - 1] && 1 != s[h][o] ? i = "der": o < s[h].length && 2 == s[r - 1][o + 1] && 1 != s[h][o] ? i = "izq": 2 == s[r - 1][o - 1] && 1 == s[h][o] ? (this.matrixGrilla[n][o][1] = 52, i = "down") : 2 == s[r - 1][o + 1] && 1 == s[h][o] ? (this.matrixGrilla[n][o][1] = 51, i = "down") : 3 == s[r - 1][o - 1] && 1 == s[h][o] ? (this.matrixGrilla[n][o][1] = 56, i = "down") : 3 == s[r - 1][o + 1] && 1 == s[h][o] && (this.matrixGrilla[n][o][1] = 55, i = "down")), "izq" == i ? (2 == s[r - 1][o - 1] && 1 == s[h][o] ? this.matrixGrilla[n][o][1] = 52 : this.matrixGrilla[n][o][1] = 51, i = "down") : "der" == i && (2 == s[r - 1][o + 1] && 1 == s[h][o] ? this.matrixGrilla[n][o][1] = 51 : this.matrixGrilla[n][o][1] = 52), i = "down") : o > 0 && 2 == s[h][o - 1] ? "der" == i && (i = "izq") : o < s[h].length && 2 == s[h][o + 1] && "izq" == i && (i = "der")
                        } else 53 == this.matrixGrilla[n][o][1] && (l = r + 2, l == s.length ? l = 0 : l > s.length && (l = 1), 2 == s[l][o] && (this.matrixGrilla[n][o][1] = 50));
                        var d = null;
                        if (n > 6 && n < a + s.length && o > 0 && o < this.matrixGrilla[n].length && 53 != this.matrixGrilla[n][o][1] && 51 != this.matrixGrilla[n][o][1] && 56 != this.matrixGrilla[n][o][1] && 51 != this.matrixGrilla[n][o][1] && 52 != this.matrixGrilla[n][o][1] && !this.tileEsJuntador(this.matrixGrilla[n - 1][o][1]) && !this.tileEsJuntador(s[r + 1][o + 1]) && !this.tileEsJuntador(s[r + 1][o - 1])) {
                            var u = Math.ceil(20 * Math.random()); (1 == u || 4 == u || 9 == u || 15 == u || 19 == u || 14 == u) && (d = 41, this.matrixGrilla[n][o][8] = d)
                        }
                        if (72 > n) {
                            var c = this.creaTile(this.matrixGrilla[n][o][1]);
                            this.agregaSprite(c, this.contenedorMapa, 1, this.matrixGrilla[n][o][0].x, this.matrixGrilla[n][o][0].y, !1),
                            null != this.matrixGrilla[n][o][8] && (this.matrixGrilla[n][o][8] = this.creaAsset(this.matrixGrilla[n][o][8]), this.agregaSprite(this.matrixGrilla[n][o][8][0], c, 1, this.matrixGrilla[n][o][8][1], this.matrixGrilla[n][o][8][2], !1)),
                            this.matrixGrilla[n][o][2] = c
                        }
                    }
                } else if (this.matrixGrilla[n][o][1] >= 4 && 72 > n) {
                    var d = this.creaAsset(this.matrixGrilla[n][o][1]),
                    c = d[0],
                    m = d[1],
                    p = d[2],
                    g = d[3];
                    0 == g ? c.addTo(this.contenedorBajoPersonaje) : 1 == g && c.addTo(this.contenedorSobrePersonaje),
                    c.position.set(this.matrixGrilla[n][o][0].x + m, this.matrixGrilla[n][o][0].y + p),
                    this.matrixGrilla[n][o][2] = c,
                    this.tileEsTorre(this.matrixGrilla[n][o][1]) ? (this.matrixGrilla[n][o][3] = d[4][1], this.agregaSprite(d[4][1], this.contenedorBajoPersonaje, 1, this.matrixGrilla[n][o][0].x + d[4][2], this.matrixGrilla[n][o][0].y + d[4][3])) : this.tileEsPortalEntrada(this.matrixGrilla[n][o][1]) || this.tileEsPortalSalida(this.matrixGrilla[n][o][1]) ? (this.matrixGrilla[n][o][3] = d[4][0], this.agregaSprite(d[4][0], this.contenedorMapa, 1, this.matrixGrilla[n][o][0].x + d[4][1], this.matrixGrilla[n][o][0].y + d[4][2]), this.matrixGrilla[n][o][9] = d[4][3], d[4][3].addTo(this.contenedorMapa), d[4][3].x = this.matrixGrilla[n][o][0].x + d[4][4], d[4][3].y = this.matrixGrilla[n][o][0].y + d[4][5], this.contenedorMapa.setChildIndex(d[4][3], 0)) : this.tileEsJuntador(this.matrixGrilla[n][o][1]) ? (this.matrixGrilla[n][o][3] = d[4][0], this.agregaSprite(d[4][0], this.contenedorMapa, 1, this.matrixGrilla[n][o][0].x + d[4][1], this.matrixGrilla[n][o][0].y + d[4][2])) : (this.tileEsPilarPajaro(this.matrixGrilla[n][o][1]) || this.tileEsHojasPajaro(this.matrixGrilla[n][o][1])) && (this.matrixGrilla[n][o][3] = d[4][0], this.agregaSprite(d[4][0], this.contenedorSobrePersonaje, d[4][3], this.matrixGrilla[n][o][0].x + d[4][1], this.matrixGrilla[n][o][0].y + d[4][2]))
                }
            }
            r += 1,
            t += 1,
            r == s.length ? this.creaPlayerMatrixDemo(!1, a) : this.indexDelay < this.delayInicial ? this.agregaFilasDemo(t, r, i, s, a) : this.hiloMapa = this.addTimer(70, this.agregaFilasDemo.bind(this, t, r, i, s, a), !1)
        },
        creaPlayerMatrixDemo: function(t, e) {
            if (1 == t) {
                var i = this.Tramos.getTramoInicial(this.tramoUsado),
                s = i[0];
                this.tramoUsado = i[1],
                this.tramosParams = i[2],
                this.indexDelay < this.delayInicial ? (this.indexDelay = this.indexDelay + 1, this.agregaFilasDemo(e, 0, "abajo", s, e + s.length)) : this.hiloMapa = this.addTimer(70, this.agregaFilasDemo.bind(this, e, 0, "abajo", s, e + s.length), !1)
            } else {
                var i = this.Tramos.getTramoInicial(this.tramoUsado),
                s = i[0];
                this.tramoUsado = i[1],
                this.tramosParams = i[2],
                this.indexDelay < this.delayInicial ? (this.indexDelay = this.indexDelay + 1, this.agregaFilasDemo(e, 0, "abajo", s, e + s.length)) : this.hiloMapa = this.addTimer(70, this.agregaFilasDemo.bind(this, e, 0, "abajo", s, e + s.length), !1)
            }
        },
        creaPlayerMatrix: function(t, e, i) {
            if (1 == t) {
                var s = 0,
                a = 0,
                r = this.partida.x,
                n = this.partida.y,
                o = new game.Point(r, n);
                i = [r, n, s, a, o, e],
                i = this.rellenaMatrix(i[0], i[1], i[2], i[3], i[4], e);
                var h = this.Tramos.getTramo(this.tramoUsado),
                l = h[0];
                this.tramoUsado = h[1],
                this.tramosParams = h[2],
                this.indexDelay < this.delayInicial && (this.indexDelay = this.indexDelay + 1, this.agregaFilas(e, 0, "abajo", l, e + l.length, i))
            } else {
                i = this.rellenaMatrix(i[0], i[1], i[2], i[3], i[4], e);
                var h = this.Tramos.getTramo(this.tramoUsado),
                l = h[0];
                this.tramoUsado = h[1],
                this.tramosParams = h[2],
                this.indexDelay < this.delayInicial ? (this.indexDelay = this.indexDelay + 1, this.agregaFilas(e, 0, "abajo", l, e + l.length, i)) : this.paramsCreadores = [e, 0, "abajo", l, e + l.length, i]
            }
        },
        rellenaMatrix: function(t, e, i, s, a, r) {
            if (t >= 0 && e >= 0 && e < this.matrixGrilla[t].length && (this.tileEsCamino(this.matrixGrilla[t][e][1]) || 3 == this.matrixGrilla[t][e][1] || this.tileEsJuntador(this.matrixGrilla[t][e][1]))) {
                if (this.rutaPj[0][i][0] = this.matrixGrilla[t][e][0], this.rutaPj[0][i][1].x = t, this.rutaPj[0][i][1].y = e, this.rutaPj[0][i][2] = this.matrixGrilla[t][e][1], a.x = t, a.y = e, i > 0) {
                    var n = this.averiguaDireccion(i, 0);
                    "der" == n ? e += 1 : "izq" == n && (e -= 1)
                }
                i += 1,
                t += 1
            } else if (t > 0 && e > 0 && e < this.matrixGrilla[t].length - 1 && this.tileVacio(this.matrixGrilla[t][e][1]) && this.tileVacio(this.matrixGrilla[t][e - 1][1]) && this.tileVacio(this.matrixGrilla[t][e + 1][1]) && (this.tileEsCamino(this.matrixGrilla[t - 1][e][1]) || 3 == this.matrixGrilla[t - 1][e][1])) {
                if (this.rutaPj[0][i][0] = this.matrixGrilla[t][e][0], this.rutaPj[0][i][1].x = t, this.rutaPj[0][i][1].y = e, this.rutaPj[0][i][2] = this.matrixGrilla[t][e][1], a.x = t, a.y = e, i > 0) {
                    var n = this.averiguaDireccion(i, 0);
                    "der" == n ? e += 1 : "izq" == n && (e -= 1)
                }
                i += 1,
                t += 1
            } else if (t >= 0 && e >= 0 && e < this.matrixGrilla[t].length && this.tileEsPortalEntrada(this.matrixGrilla[t][e][1])) {
                this.rutaPj[0][i][0] = this.matrixGrilla[t][e][0],
                this.rutaPj[0][i][1].x = t,
                this.rutaPj[0][i][1].y = e,
                this.rutaPj[0][i][2] = this.matrixGrilla[t][e][1];
                var o = this.matrixGrilla[t][e][5];
                i += 1,
                s = o.length;
                var h = new game.Point(o[0][2].x, o[0][2].y);
                h.x = t + h.x,
                h.y = e + h.y;
                var l = new Array;
                if (s > 0) for (var d = 0; s > d; d++) l[d] = this.getIndexClon();
                for (var u = 0; s > u; u++) {
                    var c = o[u][0],
                    m = o[u][1],
                    p = this.avanzePjAux[l[u]],
                    g = t + c.x,
                    f = e + c.y;
                    this.rutaPj[l[u]][p][0] = this.matrixGrilla[g][f][0],
                    this.rutaPj[l[u]][p][1].x = g,
                    this.rutaPj[l[u]][p][1].y = f,
                    this.rutaPj[l[u]][p][2] = this.matrixGrilla[g][f][1],
                    null != m || void 0 != m ? (this.rutaPj[l[u]][p][4].x = g + m.x, this.rutaPj[l[u]][p][4].y = f + m.y) : this.rutaPj[l[u]][p][4] = null,
                    a.x = g,
                    a.y = f,
                    this.avanzePjAux[l[u]] = this.avanzePjAux[l[u]] + 1,
                    this.puntosClones(g + 1, f, a, l[u], this.rutaPj[l[u]][p][4])
                }
                if (this.matrixGrilla[t][e][6] = l, a = h, t = a.x, e = a.y, i > 0) {
                    var n = this.averiguaDireccion(i, 0);
                    "der" == n ? e += 1 : "izq" == n && (e -= 1)
                }
                this.estadoClon[1] = -1
            } else a.y == e ? e -= 1 : a.y > e ? e += 2 : a.y < e && (e -= 1);
            return r > t ? this.rellenaMatrix(t, e, i, s, a, r) : (this.levelIndex.push(i), [t, e, i, s, a])
        },
        puntosClones: function(t, e, i, s, a) {
            var r = s;
            if (e >= 0 && e < this.matrixGrilla[t].length && null == a && this.tileEsPortalEntrada(this.matrixGrilla[t][e][1])) {
                var n = this.avanzePjAux[s];
                this.rutaPj[r][n][0] = this.matrixGrilla[t][e][0],
                this.rutaPj[r][n][1].x = t,
                this.rutaPj[r][n][1].y = e,
                this.rutaPj[r][n][2] = this.matrixGrilla[t][e][1];
                var o = this.matrixGrilla[t][e][5];
                this.avanzePjAux[r] = this.avanzePjAux[r] + 1;
                var h = o.length,
                l = new Array;
                if (l[0] = r, 1 == o[0][3]) {
                    for (var d = 4,
                    u = 1,
                    c = 0; null != o[0][d];) l[u] = o[0][d],
                    c += 1,
                    u += 1,
                    d += 1,
                    this.setIndexClon(l[u]);
                    for (var u = 0; c > u; u++) o[0][4 + u] = o[0][4 + u] + c,
                    o[0][4 + u] >= this.numClones && (o[0][4 + u] = 6 + u)
                } else if (h > 1) for (var m = 1; h > m; m++) l[m] = this.getIndexClon();
                for (var p = 0; h > p; p++) {
                    var g = o[p][0],
                    f = o[p][1],
                    v = t + g.x,
                    x = e + g.y,
                    y = this.avanzePjAux[l[p]];
                    0 == p && (y = this.avanzePjAux[r]),
                    this.rutaPj[l[p]][y][0] = this.matrixGrilla[v][x][0],
                    this.rutaPj[l[p]][y][1].x = v,
                    this.rutaPj[l[p]][y][1].y = x,
                    this.rutaPj[l[p]][y][2] = this.matrixGrilla[v][x][1],
                    null != f || void 0 != f ? (this.rutaPj[l[p]][y][4].x = v + f.x, this.rutaPj[l[p]][y][4].y = x + f.y) : this.rutaPj[l[p]][n][4] = null,
                    i.x = v,
                    i.y = x,
                    0 != p && (this.avanzePjAux[l[p]] = this.avanzePjAux[l[p]] + 1, this.puntosClones(v + 1, x, i, l[p], this.rutaPj[l[p]][y][4]))
                }
                this.matrixGrilla[t][e][6] = l,
                null != o[0][1] && (a = new game.Point(t + o[0][1].x + o[0][0].x, e + o[0][1].y + o[0][0].y)),
                this.avanzePjAux[r] = this.avanzePjAux[r] + 1,
                i.x = t + o[0][0].x,
                i.y = e + o[0][0].y,
                t = i.x + 1,
                e = i.y
            } else if (e >= 0 && e < this.matrixGrilla[t].length && null != a && t == a.x && e == a.y) {
                var n = this.avanzePjAux[r];
                return this.rutaPj[r][n][0] = this.matrixGrilla[t][e][0],
                this.rutaPj[r][n][1].x = t,
                this.rutaPj[r][n][1].y = e,
                this.rutaPj[r][n][2] = this.matrixGrilla[t][e][1],
                i.x = t,
                i.y = e,
                this.avanzePjAux[r] = this.avanzePjAux[r] + 1,
                t += 1,
                this.estadoClon[r] = -1,
                n
            }
            if (t >= 0 && e >= 0 && e < this.matrixGrilla[t].length && (this.tileEsCamino(this.matrixGrilla[t][e][1]) || 3 == this.matrixGrilla[t][e][1] || this.tileEsJuntador(this.matrixGrilla[t][e][1]))) {
                var n = this.avanzePjAux[r];
                this.rutaPj[r][n][0] = this.matrixGrilla[t][e][0],
                this.rutaPj[r][n][1].x = t,
                this.rutaPj[r][n][1].y = e,
                this.rutaPj[r][n][2] = this.matrixGrilla[t][e][1],
                i.x = t,
                i.y = e;
                var b = this.averiguaDireccion(n, r);
                "der" == b ? e += 1 : "izq" == b && (e -= 1),
                this.avanzePjAux[r] = this.avanzePjAux[r] + 1,
                t += 1
            } else if (t > 0 && e > 0 && e < this.matrixGrilla[t].length - 1 && this.tileVacio(this.matrixGrilla[t][e][1]) && this.tileVacio(this.matrixGrilla[t][e - 1][1]) && this.tileVacio(this.matrixGrilla[t][e + 1][1]) && (this.tileEsCamino(this.matrixGrilla[t - 1][e][1]) || 3 == this.matrixGrilla[t - 1][e][1] || this.tileEsPortalSalida(this.matrixGrilla[t - 1][e][1]))) {
                var n = this.avanzePjAux[r];
                this.rutaPj[r][n][0] = this.matrixGrilla[t][e][0],
                this.rutaPj[r][n][1].x = t,
                this.rutaPj[r][n][1].y = e,
                this.rutaPj[r][n][2] = this.matrixGrilla[t][e][1],
                i.x = t,
                i.y = e;
                var b = this.averiguaDireccion(n, r);
                "der" == b ? e += 1 : "izq" == b && (e -= 1),
                this.avanzePjAux[r] = this.avanzePjAux[r] + 1,
                t += 1
            } else if (t < this.matrixGrilla.length && e > 0 && e < this.matrixGrilla[t].length - 1 && this.tileVacio(this.matrixGrilla[t][e][1]) && !this.tileVacio(this.matrixGrilla[t][e - 1][1]) && !this.tileVacio(this.matrixGrilla[t][e + 1][1]) && (this.tileEsCamino(this.matrixGrilla[t + 1][e][1]) || this.tileEsJuntador(this.matrixGrilla[t + 1][e][1]) || 3 == this.matrixGrilla[t + 1][e][1])) {
                var n = this.avanzePjAux[r];
                this.rutaPj[r][n][0] = this.matrixGrilla[t][e][0],
                this.rutaPj[r][n][1].x = t,
                this.rutaPj[r][n][1].y = e,
                this.rutaPj[r][n][2] = this.matrixGrilla[t][e][1],
                i.x = t,
                i.y = e;
                var b = this.averiguaDireccion(n, r);
                "der" == b ? e += 1 : "izq" == b && (e -= 1),
                this.avanzePjAux[r] = this.avanzePjAux[r] + 1,
                t += 1
            } else i.y == e ? e -= 1 : i.y > e ? e += 2 : i.y < e && (e -= 1);
            return this.puntosClones(t, e, i, s, a)
        },
        mueveTargetCamara: function(t) {
            var e = t; (0 == t || 1 == this.averiguaClonCamara(t)) && (this.contenedorTargetCamara.x = this.contenedorPersonaje[e].x, this.contenedorTargetCamara.y = this.contenedorPersonaje[e].y, this.mueveNuves())
        },
        mueveNuves: function() {
            if (this.contenedorInGame.y < 0 && 0 == this.controlNuves) {
                this.controlNuves = 1;
                for (var t = 0; 2 > t; t++) {
                    var e = Math.abs(this.assets.nuves[t].y - 2e3);
                    this.tiempoNuves = e / this.speedNuves,
                    this.tweensNuves[t] = this.creaTween(this.assets.nuves[t], this.assets.nuves[t].x, this.assets.nuves[t].x, this.assets.nuves[t].y, this.assets.nuves[t].y - 2e3, this.tiempoNuves, game.Tween.Easing.Linear.None, null, this.moverNuves.bind(this, t), !0)
                }
            }
        },
        esGameOver: function() {
            for (var t = 0; t < this.clonesActivos.length; t++) {
                var e = this.clonesActivos[t];
                if ( - 1 != this.estadoSalto[e] && null != this.estadoSalto[e]) return ! 1
            }
            return - 1 != this.estadoSalto[0] ? !1 : (this.gameOver = 1, !0)
        },
        moverNuves: function(t) {
            this.assets.nuves[t].y <= -390 && (this.tweensNuves[t].stop(), this.assets.nuves[t].y = 900 + 50 * t, this.tweensNuves[t] = this.creaTween(this.assets.nuves[t], this.assets.nuves[t].x, this.assets.nuves[t].x, this.assets.nuves[t].y, this.assets.nuves[t].y - 2e3, this.tiempoNuves, game.Tween.Easing.Linear.None, null, this.moverNuves.bind(this, t), !0))
        },
        controlaVision: function(t, e) {
            if (this.currentTile[e] = t, 0 != this.analizarColision(t, e)) return ! 0;
            if (t += 1, this.rutaPj[e][t][1].x - this.rutaPj[e][t - 1][1].x == 1 && this.buscaAsset(this.rutaPj[e][t][1].x, this.rutaPj[e][t][1].y), this.rutaPj[e][t][1].x > 16) {
                var i = this.rutaPj[e][t][1].x;
                if (72 + this.indexRecorrido - i < 56) for (var s = 0; 2 > s; s++) {
                    var a = 72 + this.indexRecorrido;
                    this.indexRecorrido = this.indexRecorrido + 1;
                    for (var r = 0; r < this.mapaColum; r++) {
                        if (this.matrixGrilla[a][r][1] >= 1 && this.matrixGrilla[a][r][1] <= 3 || this.matrixGrilla[a][r][1] >= 50) {
                            if (3 != this.matrixGrilla[a][r][1]) {
                                var n = this.creaTile(this.matrixGrilla[a][r][1]);
                                this.agregaSprite(n, this.contenedorMapa, 1, this.matrixGrilla[a][r][0].x, this.matrixGrilla[a][r][0].y, !1),
                                this.matrixGrilla[a][r][2] = n,
                                null != this.matrixGrilla[a][r][8] && (this.matrixGrilla[a][r][8] = this.creaAsset(this.matrixGrilla[a][r][8]), this.agregaSprite(this.matrixGrilla[a][r][8][0], n, 1, this.matrixGrilla[a][r][8][1], this.matrixGrilla[a][r][8][2], !1), this.matrixGrilla[a][r][8][0].visible = !0, this.matrixGrilla[a][r][8][0].play("normal", 0))
                            }
                        } else if (this.matrixGrilla[a][r][1] >= 4 && this.matrixGrilla[a][r][1] <= 49) {
                            var o = this.creaAsset(this.matrixGrilla[a][r][1]),
                            n = o[0],
                            h = o[1],
                            l = o[2],
                            d = o[3];
                            0 == d ? n.addTo(this.contenedorBajoPersonaje) : 1 == d && n.addTo(this.contenedorSobrePersonaje),
                            n.position.set(this.matrixGrilla[a][r][0].x + h, this.matrixGrilla[a][r][0].y + l),
                            this.matrixGrilla[a][r][2] = n,
                            this.tileEsTorre(this.matrixGrilla[a][r][1]) ? (this.matrixGrilla[a][r][3] = o[4][1], this.agregaSprite(o[4][1], this.contenedorBajoPersonaje, 1, this.matrixGrilla[a][r][0].x + o[4][2], this.matrixGrilla[a][r][0].y + o[4][3])) : this.tileEsPortalEntrada(this.matrixGrilla[a][r][1]) || this.tileEsPortalSalida(this.matrixGrilla[a][r][1]) ? (this.matrixGrilla[a][r][3] = o[4][0], this.agregaSprite(o[4][0], this.contenedorMapa, 1, this.matrixGrilla[a][r][0].x + o[4][1], this.matrixGrilla[a][r][0].y + o[4][2]), this.matrixGrilla[a][r][9] = o[4][3], o[4][3].addTo(this.contenedorMapa), o[4][3].x = this.matrixGrilla[a][r][0].x + o[4][4], o[4][3].y = this.matrixGrilla[a][r][0].y + o[4][5], this.contenedorMapa.setChildIndex(o[4][3], 0)) : this.tileEsJuntador(this.matrixGrilla[a][r][1]) ? (this.matrixGrilla[a][r][3] = o[4][0], this.agregaSprite(o[4][0], this.contenedorMapa, 1, this.matrixGrilla[a][r][0].x + o[4][1], this.matrixGrilla[a][r][0].y + o[4][2])) : (this.tileEsPilarPajaro(this.matrixGrilla[a][r][1]) || this.tileEsHojasPajaro(this.matrixGrilla[a][r][1])) && (this.matrixGrilla[a][r][3] = o[4][0], this.agregaSprite(o[4][0], this.contenedorSobrePersonaje, o[4][3], this.matrixGrilla[a][r][0].x + o[4][1], this.matrixGrilla[a][r][0].y + o[4][2]))
                        }
                        this.rutaPj[e][t][1].x > 62 && this.indexRecorrido - 47 >= 0 && (this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] >= 1 && this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] <= 3 || this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] >= 50 ? 3 != this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] && (null != this.matrixGrilla[0 + this.indexRecorrido - 47][r][8] && this.matrixGrilla[0 + this.indexRecorrido - 47][r][8][0].parent == this.matrixGrilla[0 + this.indexRecorrido - 47][r][2] && this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][8][0], this.matrixGrilla[0 + this.indexRecorrido - 47][r][2]), this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][2], this.contenedorMapa)) : this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] >= 4 && this.matrixGrilla[0 + this.indexRecorrido - 47][r][1] <= 49 && (this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][2], this.contenedorMapa), this.tileEsTorre(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) ? this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorBajoPersonaje) : this.tileEsJuntador(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) ? this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorMapa) : this.tileEsPortalEntrada(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) || this.tileEsPortalSalida(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) ? (this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorMapa), this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][9], this.contenedorMapa)) : (this.tileEsPilarPajaro(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1]) || this.tileEsHojasPajaro(this.matrixGrilla[0 + this.indexRecorrido - 47][r][1])) && (null != this.matrixGrilla[0 + this.indexRecorrido - 47][r][3].getChildAt(0) && void 0 != this.matrixGrilla[0 + this.indexRecorrido - 47][r][3].getChildAt(0) && this.matrixGrilla[0 + this.indexRecorrido - 47][r][3].getChildAt(0).stop(), this.sacaSprite(this.matrixGrilla[0 + this.indexRecorrido - 47][r][3], this.contenedorSobrePersonaje))))
                    }
                }
            }
            return ! 1
        },
        muevePersonaje: function(t) {
            var e, i;
            1 == this.tilePorMedio[0] && (this.score = this.score + 1),
            this.revisarAwardsScore(),
            this.tilePorMedio[0] = this.tilePorMedio[0] + 1,
            this.tilePorMedio[0] > 1 && (this.tilePorMedio[0] = 0),
            this.levelIndex[this.levelStep] == t && (this.levelStep = this.levelStep + 1, this.agregaFilas(this.paramsCreadores[0], this.paramsCreadores[1], this.paramsCreadores[2], this.paramsCreadores[3], this.paramsCreadores[4], this.paramsCreadores[5])),
            this.configuraScore();
            var s = this.controlaVision(t, 0);
            if (1 == s) null != this.tweensPersonaje[0][0] && void 0 != this.tweensPersonaje[0][0] && this.tweensPersonaje[0][0].stop(),
            null != this.tweensPersonaje[0][0] && void 0 != this.tweensPersonaje[0][0] && this.tweensPersonaje[0][1].stop(),
            this.caerAlAgua(0, t, "caminando");
            else {
                t += 1;
                var a = 0;
                if (t - 1 > 0 && this.tileEsPortalEntrada(this.rutaPj[0][t - 1][2])) {
                    var r = this.rutaPj[0][t - 1][1].y,
                    n = this.rutaPj[0][t - 1][1].x;
                    this.matrixGrilla[n][r][2].play("roto", 0);
                    var o = this.matrixGrilla[n][r][6];
                    a = o.length;
                    for (var h = 1; a >= h; h++) {
                        var l, d = o[h - 1];
                        this.avanzePj[d] > 0 && (this.avanzePj[d] = this.avanzePj[d] + 1),
                        l = this.avanzePj[d],
                        r = this.rutaPj[d][l][1].y,
                        n = this.rutaPj[d][l][1].x;
                        var u = n;
                        switch (this.matrixGrilla[n][r][1]) {
                        case 25:
                            u = n - 1;
                            break;
                        case 26:
                            break;
                        case 27:
                        }
                        this.contenedorPersonaje[d].x = this.matrixGrilla[u][r][0].x,
                        this.contenedorPersonaje[d].y = this.matrixGrilla[u][r][0].y,
                        this.matrixGrilla[n][r][2].play("roto", 0),
                        this.avanzePj[d] = this.avanzePj[d] + 1
                    }
                    t += 1
                }
                if (0 == a) {
                    var r = this.rutaPj[0][t - 1][1].y,
                    n = this.rutaPj[0][t - 1][1].x,
                    c = Math.abs(this.contenedorPersonaje[0].x - this.rutaPj[0][t][0].x),
                    m = Math.abs(this.contenedorPersonaje[0].y - this.rutaPj[0][t][0].y);
                    0 == c ? i = m / this.speed: 0 == m ? i = c / this.speed: (e = Math.sqrt(Math.pow(c, 2) + Math.pow(m, 2)), i = e / this.speed);
                    var n = 0;
                    this.seteaAnimPj(t, n),
                    this.tweensPersonaje[n][1] = this.creaTween(this.contenedorPersonaje[n], this.contenedorPersonaje[n].x, this.rutaPj[n][t][0].x, this.contenedorPersonaje[n].y, this.rutaPj[n][t][0].y, i, game.Tween.Easing.Linear.None, this.muevePersonaje.bind(this, t), this.mueveTargetCamara.bind(this, n), !0)
                } else {
                    this.contenedorPersonaje[0].visible = !1,
                    this.estadoSalto[0] = -1,
                    this.tweensPersonaje[0][1].stop(),
                    this.estadoSaltoSonido = 0;
                    for (var n = 1; a >= n; n++) {
                        var d = o[n - 1],
                        l = this.avanzePj[d],
                        c = Math.abs(this.contenedorPersonaje[d].x - this.rutaPj[d][l][0].x),
                        m = Math.abs(this.contenedorPersonaje[d].y - this.rutaPj[d][l][0].y);
                        0 == c ? i = m / this.speed: 0 == m ? i = c / this.speed: (e = Math.sqrt(Math.pow(c, 2) + Math.pow(m, 2)), i = e / this.speed),
                        this.agregaClon(d);
                        var p = this.rutaPj[d][l - 1][4];
                        this.contenedorPersonaje[d].visible = !0,
                        this.tweensPersonaje[d][1] = this.creaTween(this.contenedorPersonaje[d], this.contenedorPersonaje[d].x, this.rutaPj[d][l][0].x, this.contenedorPersonaje[n].y, this.rutaPj[d][l][0].y, i, game.Tween.Easing.Linear.None, this.mueveClon.bind(this, d, p), this.mueveTargetCamara.bind(this, d), !0),
                        game.audio.playSound("portalS")
                    }
                }
            }
        },
        elGameOver: function(t) {
            if (window.QuickAds != undefined) {
               
            }
            this.gameOver = 1,
            this.tweensNuves[0].stop(),
            this.tweensNuves[1].stop(),
            this.removeTimer(this.hiloMapa),
            game.audio.stopMusic(),
            game.audio.playSound("morirS", !1),
            this.addTimer(2e3, this.finMusicaEnd.bind(this), !1),
            this.sacaHud(),
            this.contenedorGame.pivot.set(this.contenedorPersonaje[t].x + this.contenedorInGame.x, this.contenedorPersonaje[t].y + this.contenedorInGame.y),
            this.contenedorGame.position.set(this.contenedorPersonaje[t].x + this.contenedorInGame.x, this.contenedorPersonaje[t].y + this.contenedorInGame.y),
            this.creaTweenScale(this.contenedorGame, 1, 1.5, 400, game.Tween.Easing.Sinusoidal.Out),
            this.gameCoins = this.gameCoins + this.coins+9999,
            parseInt(localStorage.setItem("Coins", "" + 9999))
        },
        panelGameOver: function() {
            this.score > this.bestScore && (this.bestScore = this.score, parseInt(localStorage.setItem("bestScore", "" + this.bestScore))),
            Api.Score.submit(this.score),
            this.GameOver = new game.gameover(this, !0),
            this.addObject(this.GameOver)
        },
        averiguaClonCamara: function(t) {
            for (var e = new Array,
            i = this.clonesActivos.length,
            s = 0; i > s; s++) {
                var a = this.clonesActivos[s];
                e[s] = this.contenedorPersonaje[a].y
            }
            for (var r = 0; i > r; r++) for (var s = 0; i - 1 > s; s++) if (e[s] < e[s + 1]) {
                var n = e[s],
                o = this.clonesActivos[s];
                e[s] = e[s + 1],
                this.clonesActivos[s] = this.clonesActivos[s + 1],
                e[s + 1] = n,
                this.clonesActivos[s + 1] = o
            }
            return this.clonesActivos[0] == t ? !0 : !1
        },
        reseteaClon: function(t) {
            this.estadoSalto[t] = 0,
            null != this.tweensPersonaje[t][0] && void 0 != this.tweensPersonaje[t][0] && this.tweensPersonaje[t][0].stop(),
            this.contenedorPj[t].y = this.YChar,
            this.currentAnim[t] = "",
            this.seteaAnimPj(this.avanzePj[t] + 1, t),
            this.sombra[t][0].visible = !0,
            0 == this.personajeElegido ? (this.personaje[t][1].x = 70, this.personaje[t][1].y = -2, this.personaje[t][3].x = 70, this.personaje[t][3].y = -2) : (this.personaje[t][1].x = 83, this.personaje[t][1].y = -1, this.personaje[t][3].x = 84, this.personaje[t][3].y = -1)
        },
        agregaClon: function(t) {
            this.clonesActivos.push(t),
            this.reseteaClon(t)
        },
        remueveClon: function(t) {
            for (var e = 0; e < this.clonesActivos.length; e++) if (this.clonesActivos[e] == t) {
                this.estadoSalto[t] = -1,
                this.clonesActivos.splice(e, 1),
                null != this.tweensPersonaje[t][0] && void 0 != this.tweensPersonaje[t][0] && this.tweensPersonaje[t][0].stop(),
                null != this.tweensPersonaje[t][0] && void 0 != this.tweensPersonaje[t][0] && this.tweensPersonaje[t][1].stop();
                break
            }
        },
        vuelvePersonaje: function() {
            this.contenedorPersonaje[0].visible = !0;
            var t = this.currentTile[0] + 1;
            this.contenedorPersonaje[0].x = this.rutaPj[0][t][0].x,
            this.contenedorPersonaje[0].y = this.rutaPj[0][t][0].y,
            this.estadoSalto[0] = 0,
            this.currentAnim[0] = "",
            this.muevePersonaje(t)
        },
        buscaCheckPointClon: function(t, e, i) {
            var s = this.avanzePj[t],
            a = this.rutaPj[t][s][2];
            if (t > 0) if (null != e) for (var r = this.rutaPj[t][s][1].x, n = this.rutaPj[t][s][1].y; r != e.x || n != e.y;) this.avanzePj[t] = this.avanzePj[t] + 1,
            s = this.avanzePj[t],
            r = this.rutaPj[t][s][1].x,
            n = this.rutaPj[t][s][1].y;
            else {
                for (var r = this.rutaPj[t][s][1].x, n = this.rutaPj[t][s][1].y; ! this.tileEsPortalEntrada(a);) r = this.rutaPj[t][s][1].x,
                n = this.rutaPj[t][s][1].y,
                this.avanzePj[t] = this.avanzePj[t] + 1,
                s = this.avanzePj[t],
                a = this.rutaPj[t][s][2];
                if (null != i) for (r = this.rutaPj[t][s][1].x, n = this.rutaPj[t][s][1].y, e = i; r != e.x || n != e.y;) this.avanzePj[t] = this.avanzePj[t] + 1,
                s = this.avanzePj[t],
                r = this.rutaPj[t][s][1].x,
                n = this.rutaPj[t][s][1].y
            }
        },
        caerAlAgua: function(t, e, i) {
            if ("caminando" == i) {
                var s = (this.rutaPj[0][1][0].x - this.rutaPj[0][0][0].x) / 2,
                a = Math.abs(this.rutaPj[0][1][0].y - this.rutaPj[0][0][0].y) / 2;
                this.contenedorPersonaje[t].x = this.contenedorPersonaje[t].x + s,
                this.contenedorPersonaje[t].y = this.contenedorPersonaje[t].y + a
            } else if ("aterriza" == i) {
                var s = (this.rutaPj[0][1][0].x - this.rutaPj[0][0][0].x) / 2,
                a = Math.abs(this.rutaPj[0][1][0].y - this.rutaPj[0][0][0].y) / 2;
                this.contenedorPersonaje[t].x = this.contenedorPersonaje[t].x + s,
                this.contenedorPersonaje[t].y = this.contenedorPersonaje[t].y + a
            } else if ("saltando" == i) if (this.tileEsAgua(this.rutaPj[t][e + 1][2])) {
                var s = (this.rutaPj[0][1][0].x - this.rutaPj[0][0][0].x) / 2,
                a = Math.abs(this.rutaPj[0][1][0].y - this.rutaPj[0][0][0].y) / 2;
                this.contenedorPersonaje[t].x = this.contenedorPersonaje[t].x + s,
                this.contenedorPersonaje[t].y = this.contenedorPersonaje[t].y + a
            } else if (this.tileEsAgua(this.rutaPj[t][e - 1][2])) {
                var s = (this.rutaPj[0][1][0].x - this.rutaPj[0][0][0].x) / 2,
                a = Math.abs(this.rutaPj[0][1][0].y - this.rutaPj[0][0][0].y) / 2;
                this.contenedorPersonaje[t].x = this.contenedorPersonaje[t].x - s,
                this.contenedorPersonaje[t].y = this.contenedorPersonaje[t].y - a
            } else {
                var s = (this.rutaPj[0][1][0].x - this.rutaPj[0][0][0].x) / 2,
                a = Math.abs(this.rutaPj[0][1][0].y - this.rutaPj[0][0][0].y) / 2;
                this.contenedorPersonaje[t].x = this.contenedorPersonaje[t].x + .65 * s,
                this.contenedorPersonaje[t].y = this.contenedorPersonaje[t].y + .65 * a
            }
            switch (game.audio.playSound("caeAguaS"), this.sombra[t][0].visible = !1, this.estadoSalto[t] = -1, this.currentAnim[t]) {
            case "correrIzq":
            case "aterrizaIzq":
                this.personaje[t][0].visible = !1,
                this.personaje[t][2].play("splashIzq", 0),
                this.personaje[t][2].anims.splashIzq.onComplete = this.llamaAccion.bind(this, 30, this.ocultaClon.bind(this, t)),
                0 == this.personajeElegido ? (this.personaje[t][2].x = -20, this.personaje[t][2].y = -20) : (this.personaje[t][2].x = -14, this.personaje[t][2].y = -17);
                break;
            case "correr":
            case "aterriza":
                this.personaje[t][0].visible = !1,
                this.personaje[t][2].play("splashCentro", 0),
                this.personaje[t][2].anims.splashCentro.onComplete = this.llamaAccion.bind(this, 30, this.ocultaClon.bind(this, t)),
                0 == this.personajeElegido ? (this.personaje[t][2].x = -27, this.personaje[t][2].y = -18) : (this.personaje[t][2].x = -21, this.personaje[t][2].y = -15);
                break;
            case "correrDer":
            case "aterrizaDer":
                this.personaje[t][1].visible = !1,
                this.personaje[t][3].play("splashDer", 0),
                this.personaje[t][3].anims.splashDer.onComplete = this.llamaAccion.bind(this, 30, this.ocultaClon.bind(this, t)),
                0 == this.personajeElegido ? (this.personaje[t][3].x = 95, this.personaje[t][3].y = -8) : (this.personaje[t][3].x = 104, this.personaje[t][3].y = -4)
            }
            this.esGameOver() && this.elGameOver(t)
        },
        finMusicaEnd: function() {
            0 != this.gameOver && (game.audio.playMusic("mainMusic", !0), this.panelGameOver())
        },
        ocultaClon: function(t) {
            this.personaje[t][2].x = 0,
            this.personaje[t][2].y = 0,
            0 == this.personajeElegido ? (this.personaje[t][3].x = 70, this.personaje[t][3].y = -2) : (this.personaje[t][3].x = 83, this.personaje[t][3].y = -1),
            this.contenedorPersonaje[t].visible = !1,
            this.personaje[t][2].currentAnim = "",
            this.currentAnim[t] = ""
        },
        clonAninFXfusion: function(t) {
            this.personaje[t][0].visible = !1,
            this.personaje[t][1].visible = !1,
            this.personaje[t][3].visible = !1,
            this.personaje[t][2].visible = !0,
            this.personaje[t][2].x = -50,
            this.personaje[t][2].y = -33,
            this.personaje[t][2].play("FXfusion", 0),
            this.personaje[t][2].anims.FXfusion.onComplete = this.llamaAccion.bind(this, 30, this.ocultaClon.bind(this, t)),
            this.coins = this.coins + 10,
            this.revisarAwardsCoins(),
            this.configuraCoins(),
            game.audio.playSound("fusionS"),
            this.sombra[t][0].visible = !1
        },
        mueveClon: function(t, e) {
            var i = t,
            s = this.controlaVision(this.avanzePj[i], t);
            if (this.puntosFinalesClon[t] = e, 1 == this.tilePorMedio[t] && (this.score = this.score + 1), this.revisarAwardsScore(), this.tilePorMedio[t] = this.tilePorMedio[t] + 1, this.tilePorMedio[t] > 1 && (this.tilePorMedio[t] = 0), this.configuraScore(), 1 == s) this.remueveClon(i),
            this.buscaCheckPointClon(t, e, null),
            this.caerAlAgua(t, this.avanzePj[t], "caminando");
            else {
                var a = this.avanzePj[i],
                r = this.rutaPj[i][a][1].x,
                n = this.rutaPj[i][a][1].y;
                if (null == e || null != e && (e.x != r || e.y != n)) {
                    if (this.tileEsJuntador(this.rutaPj[i][a][2])) {
                        if (this.matrixGrilla[r][n][2].play("anim", 0), 1 == this.matrixGrilla[r][n][7]) {
                            this.remueveClon(i),
                            this.clonAninFXfusion(t);
                            var o = null;
                            return null != this.matrixGrilla[r][n][5] && (o = new game.Point(this.matrixGrilla[r][n][5][0][0].x, this.matrixGrilla[r][n][5][0][0].y), o.x = r + o.x, o.y = n + o.y),
                            this.buscaCheckPointClon(i, e, o),
                            0
                        }
                        this.matrixGrilla[r][n][7] = !0
                    } else if (this.tileEsPortalEntrada(this.rutaPj[i][a][2])) {
                        this.matrixGrilla[r][n][2].play("roto", 0);
                        var h = this.matrixGrilla[r][n][6],
                        l = h.length;
                        this.contenedorPersonaje[i].visible = !1,
                        game.audio.playSound("portalS"),
                        this.estadoSaltoSonido = 0;
                        for (var d = 1; l >= d; d++) {
                            var u = h[d - 1];
                            if (u == t) {
                                this.avanzePj[u] = this.avanzePj[u] + 1;
                                var a = this.avanzePj[u];
                                this.corrigePortal(u, a),
                                this.currentTile[i] = a,
                                r = this.rutaPj[i][a][1].x,
                                n = this.rutaPj[i][a][1].y,
                                this.matrixGrilla[r][n][2].play("roto", 0),
                                e = this.rutaPj[u][a][4],
                                this.reseteaClon(u)
                            } else {
                                this.agregaClon(u),
                                this.avanzePj[u] > 0 && (this.avanzePj[u] = this.avanzePj[u] + 1);
                                var a = this.avanzePj[u];
                                this.corrigePortal(u, a),
                                this.currentTile[u] = a,
                                r = this.rutaPj[u][a][1].x,
                                n = this.rutaPj[u][a][1].y;
                                var c = this.rutaPj[u][a][4];
                                this.matrixGrilla[r][n][2].play("roto", 0),
                                this.avanzePj[u] = this.avanzePj[u] + 1,
                                this.mueveClon(u, c)
                            }
                        }
                    }
                    this.avanzePj[i] = this.avanzePj[i] + 1;
                    var m, p, a = this.avanzePj[i],
                    g = Math.abs(this.contenedorPersonaje[i].x - this.rutaPj[i][a][0].x),
                    f = Math.abs(this.contenedorPersonaje[i].y - this.rutaPj[i][a][0].y);
                    0 == g ? p = f / this.speed: 0 == f ? p = g / this.speed: (m = Math.sqrt(Math.pow(g, 2) + Math.pow(f, 2)), p = m / this.speed),
                    this.seteaAnimPj(a, i),
                    this.contenedorPersonaje[i].visible = !0,
                    this.tweensPersonaje[i][1] = this.creaTween(this.contenedorPersonaje[i], this.contenedorPersonaje[i].x, this.rutaPj[i][a][0].x, this.contenedorPersonaje[i].y, this.rutaPj[i][a][0].y, p, game.Tween.Easing.Linear.None, this.mueveClon.bind(this, i, e), this.mueveTargetCamara.bind(this, i), !0)
                } else null != e && e.x == r && e.y == n && this.tileEsJuntador(this.rutaPj[i][a][2]) && (this.matrixGrilla[r][n][2].play("anim", 0), this.remueveClon(i), 1 != this.matrixGrilla[r][n][7] ? (this.matrixGrilla[r][n][7] = !0, this.contenedorPersonaje[i].visible = !1, this.estadoSaltoSonido = 0, this.vuelvePersonaje()) : this.clonAninFXfusion(t))
            }
        },
        imitaClon: function(t) {
            this.contenedorPj[0].x = this.contenedorPj[t].x,
            this.contenedorPj[0].y = this.contenedorPj[t].y
        },
        corrigePortal: function(t, e) {
            var i = this.rutaPj[t][e][1].y,
            s = this.rutaPj[t][e][1].x;
            switch (this.matrixGrilla[s][i][1]) {
            case 25:
                s -= 1;
                break;
            case 26:
                break;
            case 27:
            }
            this.contenedorPersonaje[t].x = this.matrixGrilla[s][i][0].x,
            this.contenedorPersonaje[t].y = this.matrixGrilla[s][i][0].y
        },
        getIndexClon: function() {
            for (var t = 1; t < this.numClones; t++) if ( - 1 == this.estadoClon[t]) return this.estadoClon[t] = 0,
            t;
            return - 1
        },
        setIndexClon: function(t) {
            this.estadoClon[t] = -1
        },
        buscaPajaros: function(t, e, i, s) {
            switch (t) {
            case "tileEsTorrePajaro":
                for (var a = i; a > -i / 2; a--) if (e + a > 0 && 1 == this.tileEsTorrePajaro(this.matrixGrilla[e + a][s][1])) return e + a;
                return - 1;
            case "tileEsHojasPajaro":
                for (var a = i; a > -i / 2; a--) if (e + a > 0 && 1 == this.tileEsHojasPajaro(this.matrixGrilla[e + a][s][1])) return e + a;
                return - 1;
            case "tileEsTuberiaPajaro":
                for (var a = i; a > -i / 2; a--) if (e + a > 0 && 1 == this.tileEsTuberiaPajaro(this.matrixGrilla[e + a][s][1])) return e + a;
                return - 1;
            case "tileEsEscaleraPajaro":
                for (var a = i; a > -i / 2; a--) if (e + a > 0 && 1 == this.tileEsEscaleraPajaro(this.matrixGrilla[e + a][s][1])) return e + a;
                return - 1;
            case "tileEsPilarPajaro":
                for (var a = i; a > -i / 2; a--) if (e + a > 0 && 1 == this.tileEsPilarPajaro(this.matrixGrilla[e + a][s][1])) return e + a;
                return - 1
            }
            return - 1
        },
        buscaAsset: function(t, e) {
            for (var i, s = 20,
            a = 0; a < this.mapaColum; a++) if (i = t, 8 == this.matrixGrilla[i][a][1] && "abrir" != this.matrixGrilla[i][a][2].currentAnim && (this.matrixGrilla[i][a][2].play("abrir", 0), game.audio.playSound("florS")), e - 1 > 0 && this.tileEsGate(this.matrixGrilla[i][e - 1][1]) && "pasar" != this.matrixGrilla[i][e - 1][2].currentAnim && (this.matrixGrilla[i][e - 1][2].play("pasar", 0), game.audio.playSound("gateS" + this.gateSound), this.gateSound = this.gateSound + 1, this.gateSound > 2 && (this.gateSound = 1)), t + s < this.matrixGrilla.length) {
                if (i = this.buscaPajaros("tileEsTorrePajaro", t, s, a), -1 != i && this.matrixGrilla[i][a][2].getChildAt(0) && this.matrixGrilla[i][a][2].getChildAt(0).getChildAt(0)) {
                    var r = this.matrixGrilla[i][a][2].getChildAt(0).getChildAt(0);
                    if ("normal" == r.currentAnim) return r.play("prepararse", 0),
                    r.anims.prepararse.onComplete = this.llamaAccion.bind(this, 30, this.vuelaPajaro.bind(this, r)),
                    game.audio.playSound("pajaroS"),
                    0
                }
                if (i = this.buscaPajaros("tileEsTuberiaPajaro", t, s, a), -1 != i && this.matrixGrilla[i][a][2].getChildAt(0)) {
                    var r = this.matrixGrilla[i][a][2].getChildAt(0);
                    if ("normal" == r.currentAnim) {
                        var n = r.parent;
                        n.scale.x;
                        return r.play("prepararse", 0),
                        r.anims.prepararse.onComplete = this.llamaAccion.bind(this, 30, this.vuelaPajaro.bind(this, r, null)),
                        game.audio.playSound("pajaroS"),
                        0
                    }
                }
                if (i = this.buscaPajaros("tileEsEscaleraPajaro", t, s, a), -1 != i && this.matrixGrilla[i][a][2].getChildAt(0) && this.matrixGrilla[i][a][2].getChildAt(0).getChildAt(0)) {
                    var r = this.matrixGrilla[i][a][2].getChildAt(0).getChildAt(0);
                    if ("normal" == r.currentAnim) {
                        var n = r.parent;
                        r.play("prepararse", 0),
                        r.anims.prepararse.onComplete = this.llamaAccion.bind(this, 30, this.vuelaPajaro.bind(this, r, n));
                        var o = .85,
                        h = 1;
                        return this.creaTweenScale(n, o, h, 500, game.Tween.Easing.Cubic.In),
                        game.audio.playSound("pajaroS"),
                        0
                    }
                }
                if (i = this.buscaPajaros("tileEsHojasPajaro", t, s, a), -1 != i && this.matrixGrilla[i][a][3].getChildAt(0)) {
                    var r = this.matrixGrilla[i][a][3].getChildAt(0);
                    if ("normal" == r.currentAnim) {
                        r.play("prepararse", 0);
                        var n = r.parent;
                        r.anims.prepararse.onComplete = this.llamaAccion.bind(this, 30, this.vuelaPajaro.bind(this, r, n));
                        var o = .75,
                        h = 1;
                        return this.creaTweenScale(n, o, h, 500, game.Tween.Easing.Cubic.In),
                        game.audio.playSound("pajaroS"),
                        0
                    }
                }
                if (i = this.buscaPajaros("tileEsPilarPajaro", t, s, a), -1 != i && this.matrixGrilla[i][a][3].getChildAt(0)) {
                    var r = this.matrixGrilla[i][a][3].getChildAt(0);
                    if ("normal" == r.currentAnim) {
                        r.play("prepararse", 0);
                        var n = r.parent;
                        r.anims.prepararse.onComplete = this.llamaAccion.bind(this, 30, this.vuelaPajaro.bind(this, r, n));
                        var o = .75,
                        h = 1;
                        this.creaTweenScale(n, o, h, 500, game.Tween.Easing.Cubic.In),
                        game.audio.playSound("pajaroS")
                    }
                }
            }
        },
        vuelaPajaro: function(t, e, i) {
            t.play("volar", 0),
            null == i && (i = t.scale.x),
            null != e && (t = e),
            this.creaTween(t, t.x, t.x + (game.system.width + 100) * i, t.y, t.y - 200, 3e3, game.Tween.Easing.Sinusoidal.In)
        },
        comeMoneda: function(t) {
            this.sacaSprite(t, t.parent)
        },
        revisarAwardsScore: function() {
            if (this.score >= 500 && 0 == this.awards[5]) {
                var t = {
                    award: "award5"
                };
                Api.Award.submit(t),
                this.awards[5] = !0
            }
            if (this.score >= 1e3 && 0 == this.awards[6]) {
                var t = {
                    award: "award6"
                };
                Api.Award.submit(t),
                this.awards[6] = !0
            }
            if (this.score >= 1500 && 0 == this.awards[7]) {
                var t = {
                    award: "award7"
                };
                Api.Award.submit(t),
                this.awards[7] = !0
            }
            if (this.score >= 2e3 && 0 == this.awards[8]) {
                var t = {
                    award: "award8"
                };
                Api.Award.submit(t),
                this.awards[8] = !0
            }
        },
        revisarAwardsCoins: function() {
            if (this.coins >= 200 && 0 == this.awards[1]) {
                var t = {
                    award: "award1"
                };
                Api.Award.submit(t),
                this.awards[1] = !0
            }
            if (this.coins >= 400 && 0 == this.awards[2]) {
                var t = {
                    award: "award2"
                };
                Api.Award.submit(t),
                this.awards[2] = !0
            }
            if (this.coins >= 800 && 0 == this.awards[3]) {
                var t = {
                    award: "award3"
                };
                Api.Award.submit(t),
                this.awards[3] = !0
            }
            if (this.coins >= 1500 && 0 == this.awards[4]) {
                var t = {
                    award: "award4"
                };
                Api.Award.submit(t),
                this.awards[4] = !0
            }
        },
        analizarColision: function(t, e) {
            var i = e;
            if (this.tileEsCamino(this.rutaPj[i][t][2])) {
                var s = this.rutaPj[i][t][1].x,
                a = this.rutaPj[i][t][1].y;
                null != this.matrixGrilla[s][a][8] && "normal" == this.matrixGrilla[s][a][8][0].currentAnim && (this.matrixGrilla[s][a][8][0].play("comer", 0), game.audio.playSound("coinS"), this.matrixGrilla[s][a][8][0].onComplete = this.llamaAccion.bind(this, 30, this.comeMoneda.bind(this, this.matrixGrilla[s][a][8][0])), this.coins = this.coins + 1, this.revisarAwardsCoins(), this.configuraCoins())
            } else if (3 == this.rutaPj[i][t][2] || 0 == this.rutaPj[i][t][2] && 3 == this.rutaPj[i][t - 1][2] && 3 == this.rutaPj[i][t + 1][2]) {
                if (1 == this.inmortal) return ! 1;
                if (0 == this.estadoSalto[i]) return this.estadoSalto[i] = -1,
                !0
            }
            return ! 1
        },
        creaTile: function(t) {
            var e = t;
            return this.indexTiles[e] = this.indexTiles[e] + 1,
            this.indexTiles[e] == this.maxTiles && (this.indexTiles[e] = 0),
            this.assets.tiles[this.indexTiles[e]][e]
        },
        creaAsset: function(t) {
            var e, i, s, a, r = new Array;
            switch (t) {
            case 4:
                e = this.assets.cascadas[this.indexTuberias][0],
                e.scale.set( - 1, 1),
                i = -1 * e.width - 16,
                s = 0,
                a = 1,
                this.assets.cascadas[this.indexTuberias][0].play("normal", Math.floor(14 * Math.random())),
                this.indexTuberias = this.indexTuberias + 1,
                this.indexTuberias == this.maxTuberias && (this.indexTuberias = 0);
                break;
            case 5:
                e = this.assets.cascadas[this.indexTuberias][0],
                i = -1 * e.width + 46,
                s = 0,
                a = 1,
                this.assets.cascadas[this.indexTuberias][0].play("normal", Math.floor(14 * Math.random())),
                this.indexTuberias = this.indexTuberias + 1,
                this.indexTuberias == this.maxTuberias && (this.indexTuberias = 0);
                break;
            case 6:
                e = this.assets.escaleras[this.indexEscaleras][0],
                i = -35,
                s = 0,
                a = 1,
                this.indexEscaleras = this.indexEscaleras + 1,
                this.indexEscaleras == this.maxEscaleras && (this.indexEscaleras = 0);
                break;
            case 7:
                e = this.assets.escaleras[this.indexEscaleras][0],
                e.scale.set( - 1, 1),
                i = 70,
                s = 0,
                a = 1,
                this.indexEscaleras = this.indexEscaleras + 1,
                this.indexEscaleras == this.maxEscaleras && (this.indexEscaleras = 0);
                break;
            case 8:
                e = this.assets.flores[this.indexFlores],
                i = -5,
                s = -30,
                a = 0,
                e.play("normal", 0),
                this.indexFlores = this.indexFlores + 1,
                this.indexFlores == this.maxFlores && (this.indexFlores = 0);
                break;
            case 9:
                e = this.assets.torres[this.indexTorres][0],
                r[0] = this.assets.torres[this.indexTorres][1],
                r[1] = this.assets.torres[this.indexTorres][2],
                this.agregaSprite(r[0], e, 1, -124, -14, !1);
                var n = Math.floor(45 * Math.random());
                r[0].play("normal", n),
                r[1].play("normal", n),
                r[2] = -145,
                r[3] = 84,
                a = 1,
                i = -22,
                s = -1 * e.height / 1.7,
                this.indexTorres = this.indexTorres + 1,
                this.indexTorres == this.maxTorres && (this.indexTorres = 0);
                break;
            case 10:
                e = this.assets.patos[this.indexPatos];
                var n = Math.floor(49 * Math.random());
                e.play("normal", n),
                n = Math.floor(2 * Math.random()),
                1 == n ? (e.scale.set( - 1, 1), i = 40) : (e.scale.set(1, 1), i = -5),
                s = 0,
                a = 0,
                this.indexPatos = this.indexPatos + 1,
                this.indexPatos == this.maxPatos && (this.indexPatos = 0);
                break;
            case 11:
                var n = Math.floor(5 * Math.random());
                e = this.assets.hojas[this.indexHojas][n],
                i = 5,
                s = 0,
                a = 0;
                var o = new game.Container;
                r[1] = 18,
                r[2] = 3,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .75,
                r[0] = o;
                var h = this.assets.hojas[this.indexHojas][5];
                h.scale.set( - 1, 1),
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexHojas = this.indexHojas + 1,
                this.indexHojas == this.maxHojas && (this.indexHojas = 0);
                break;
            case 12:
                var n = Math.floor(5 * Math.random());
                e = this.assets.hojas[this.indexHojas][n],
                i = 5,
                s = 0,
                a = 0;
                var o = new game.Container;
                r[1] = 15,
                r[2] = 3,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .75,
                r[0] = o;
                var h = this.assets.hojas[this.indexHojas][5];
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexHojas = this.indexHojas + 1,
                this.indexHojas == this.maxHojas && (this.indexHojas = 0);
                break;
            case 13:
                e = this.assets.cascadas[this.indexTuberias][0],
                e.scale.set( - 1, 1),
                i = -1 * e.width - 16,
                s = 0,
                a = 1,
                this.assets.cascadas[this.indexTuberias][0].play("normal", Math.floor(14 * Math.random()));
                var h = this.assets.cascadas[this.indexTuberias][1];
                h.scale.set( - 1, 1),
                h.addTo(e),
                h.x = 140,
                h.y = 0;
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                this.indexTuberias = this.indexTuberias + 1,
                this.indexTuberias == this.maxTuberias && (this.indexTuberias = 0);
                break;
            case 14:
                e = this.assets.cascadas[this.indexTuberias][0],
                i = -1 * e.width + 46,
                s = 0,
                a = 1,
                this.assets.cascadas[this.indexTuberias][0].play("normal", Math.floor(14 * Math.random()));
                var h = this.assets.cascadas[this.indexTuberias][1];
                h.scale.set( - 1, 1),
                h.addTo(e),
                h.x = 140,
                h.y = 0;
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                this.indexTuberias = this.indexTuberias + 1,
                this.indexTuberias == this.maxTuberias && (this.indexTuberias = 0);
                break;
            case 15:
                var n = Math.floor(5 * Math.random());
                e = this.assets.hojas[this.indexHojas][n],
                i = 5,
                s = 0,
                a = 0,
                this.indexHojas = this.indexHojas + 1,
                this.indexHojas == this.maxHojas && (this.indexHojas = 0);
                break;
            case 16:
                e = this.assets.bloques[this.indexPilares][0],
                i = -5,
                s = -50,
                a = 0,
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 17:
                e = this.assets.bloques[this.indexPilares][1],
                i = -5,
                s = -50,
                a = 0,
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 18:
                e = this.assets.bloques[this.indexPilares][2],
                i = -5,
                s = -50,
                a = 0,
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 19:
                e = this.assets.brillitos[this.indexBrillitos];
                var n = Math.floor(43 * Math.random());
                e.play("normal", n),
                i = 8,
                s = 0,
                a = 0,
                this.indexBrillitos = this.indexBrillitos + 1,
                this.indexBrillitos == this.maxBrillitos && (this.indexBrillitos = 0);
                break;
            case 20:
                e = this.assets.gates[this.indexGates][0],
                i = -7,
                s = -75,
                a = 1,
                e.play("normal", 0),
                this.indexGates = this.indexGates + 1,
                this.indexGates == this.maxGates && (this.indexGates = 0);
                break;
            case 21:
                e = this.assets.gates[this.indexGates][1],
                i = -7,
                s = -75,
                a = 1,
                e.play("normal", 0),
                this.indexGates = this.indexGates + 1,
                this.indexGates == this.maxGates && (this.indexGates = 0);
                break;
            case 22:
                e = this.assets.portalesEntrada[this.indexPortalesE][0],
                i = -24,
                s = -71;
                var n = Math.floor(19 * Math.random());
                e.play("normal", n),
                a = 1,
                r[0] = this.creaTile(1),
                r[1] = 0,
                r[2] = 0;
                var l = this.assets.portalesEntrada[this.indexPortalesE][4];
                r[3] = l,
                r[4] = -.5,
                r[5] = 35,
                this.indexPortalesE = this.indexPortalesE + 1,
                this.indexPortalesE == this.maxPortalesE && (this.indexPortalesE = 0);
                break;
            case 23:
                e = this.assets.portalesEntrada[this.indexPortalesE][1],
                i = -18,
                s = -43;
                var n = Math.floor(19 * Math.random());
                e.play("normal", n),
                a = 1,
                r[0] = this.creaTile(2),
                r[1] = 0,
                r[2] = 0;
                var l = this.assets.portalesEntrada[this.indexPortalesE][3];
                r[3] = l,
                r[4] = 9,
                r[5] = 14,
                this.indexPortalesE = this.indexPortalesE + 1,
                this.indexPortalesE == this.maxPortalesE && (this.indexPortalesE = 0);
                break;
            case 24:
                e = this.assets.portalesEntrada[this.indexPortalesE][1],
                e.scale.set( - 1, 1),
                i = 60,
                s = -45;
                var n = Math.floor(19 * Math.random());
                e.play("normal", n),
                a = 1,
                r[0] = this.creaTile(2),
                r[1] = 0,
                r[2] = 0;
                var l = this.assets.portalesEntrada[this.indexPortalesE][3];
                l.scale.set( - 1, 1),
                r[3] = l,
                r[4] = 32,
                r[5] = 18,
                this.indexPortalesE = this.indexPortalesE + 1,
                this.indexPortalesE == this.maxPortalesE && (this.indexPortalesE = 0);
                break;
            case 25:
                e = this.assets.portalesSalida[this.indexPortalesS][0],
                i = -45,
                s = -57;
                var n = Math.floor(19 * Math.random());
                e.play("normal", n),
                a = 0,
                r[0] = this.creaTile(1),
                r[1] = 0,
                r[2] = 0;
                var l = this.assets.portalesSalida[this.indexPortalesS][4];
                r[3] = l,
                r[4] = 0,
                r[5] = 11,
                this.indexPortalesS = this.indexPortalesS + 1,
                this.indexPortalesS == this.maxPortalesS && (this.indexPortalesS = 0);
                break;
            case 26:
                e = this.assets.portalesSalida[this.indexPortalesS][1],
                i = -2,
                s = -46;
                var n = Math.floor(19 * Math.random());
                e.play("normal", n),
                a = 0,
                r[0] = this.creaTile(58),
                r[1] = 0,
                r[2] = 0;
                var l = this.assets.portalesSalida[this.indexPortalesS][3];
                r[3] = l,
                r[4] = 0,
                r[5] = 13,
                this.indexPortalesS = this.indexPortalesS + 1,
                this.indexPortalesS == this.maxPortalesS && (this.indexPortalesS = 0);
                break;
            case 27:
                e = this.assets.portalesSalida[this.indexPortalesS][1],
                e.scale.set( - 1, 1),
                i = 46,
                s = -49;
                var n = Math.floor(19 * Math.random());
                e.play("normal", n),
                a = 0,
                r[0] = this.creaTile(57),
                r[1] = 0,
                r[2] = 0;
                var l = this.assets.portalesSalida[this.indexPortalesS][3];
                l.scale.set( - 1, 1),
                r[3] = l,
                r[4] = 43,
                r[5] = 9,
                this.indexPortalesS = this.indexPortalesS + 1,
                this.indexPortalesS == this.maxPortalesS && (this.indexPortalesS = 0);
                break;
            case 28:
                e = this.assets.juntadores[this.indexJuntadores][0],
                i = -23,
                s = -25,
                a = 0,
                r[0] = this.creaTile(2),
                r[1] = 0,
                r[2] = 0,
                this.indexJuntadores = this.indexJuntadores + 1,
                this.indexJuntadores == this.maxJuntadores && (this.indexJuntadores = 0);
                break;
            case 29:
                e = this.assets.juntadores[this.indexJuntadores][1],
                i = -23,
                s = -25,
                a = 0,
                r[0] = this.creaTile(2),
                r[1] = 0,
                r[2] = 0,
                this.indexJuntadores = this.indexJuntadores + 1,
                this.indexJuntadores == this.maxJuntadores && (this.indexJuntadores = 0);
                break;
            case 30:
                e = this.assets.juntadores[this.indexJuntadores][1],
                e.scale.set( - 1, 1),
                i = 66,
                s = -25,
                a = 0,
                r[0] = this.creaTile(2),
                r[1] = 0,
                r[2] = 0,
                this.indexJuntadores = this.indexJuntadores + 1,
                this.indexJuntadores == this.maxJuntadores && (this.indexJuntadores = 0);
                break;
            case 31:
                e = this.assets.torres[this.indexTorres][0],
                r[0] = this.assets.torres[this.indexTorres][1],
                r[1] = this.assets.torres[this.indexTorres][2];
                var h = this.assets.torres[this.indexTorres][3];
                h.scale.set( - 1, 1),
                h.addTo(r[0]),
                h.x = 210,
                h.y = -25;
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                this.agregaSprite(r[0], e, 1, -124, -14, !1);
                var n = Math.floor(45 * Math.random());
                r[0].play("normal", n),
                r[1].play("normal", n),
                r[2] = -145,
                r[3] = 84,
                a = 1,
                i = -22,
                s = -1 * e.height / 1.7,
                this.indexTorres = this.indexTorres + 1,
                this.indexTorres == this.maxTorres && (this.indexTorres = 0);
                break;
            case 32:
                e = this.assets.torres[this.indexTorres][0],
                r[0] = this.assets.torres[this.indexTorres][1],
                r[1] = this.assets.torres[this.indexTorres][2];
                var h = this.assets.torres[this.indexTorres][3];
                h.addTo(r[0]),
                h.x = 113,
                h.y = -24;
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                this.agregaSprite(r[0], e, 1, -124, -14, !1);
                var n = Math.floor(45 * Math.random());
                r[0].play("normal", n),
                r[1].play("normal", n),
                r[2] = -145,
                r[3] = 84,
                a = 1,
                i = -22,
                s = -1 * e.height / 1.7,
                this.indexTorres = this.indexTorres + 1,
                this.indexTorres == this.maxTorres && (this.indexTorres = 0);
                break;
            case 33:
                e = this.assets.bloques[this.indexPilares][0],
                i = -5,
                s = -50,
                a = 0;
                var o = new game.Container;
                r[1] = 20,
                r[2] = -47,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .85,
                r[0] = o;
                var h = this.assets.bloques[this.indexPilares][3];
                h.scale.set( - 1, 1),
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 34:
                e = this.assets.bloques[this.indexPilares][1],
                i = -5,
                s = -50,
                a = 0;
                var o = new game.Container;
                r[1] = 20,
                r[2] = -47,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .85,
                r[0] = o;
                var h = this.assets.bloques[this.indexPilares][3];
                h.scale.set( - 1, 1),
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 35:
                e = this.assets.bloques[this.indexPilares][2],
                i = -5,
                s = -50,
                a = 0;
                var o = new game.Container;
                r[1] = 20,
                r[2] = -47,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .85,
                r[0] = o;
                var h = this.assets.bloques[this.indexPilares][3];
                h.scale.set( - 1, 1),
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 36:
                e = this.assets.bloques[this.indexPilares][0],
                i = -5,
                s = -50,
                a = 0;
                var o = new game.Container;
                r[1] = 18,
                r[2] = -47,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .85,
                r[0] = o;
                var h = this.assets.bloques[this.indexPilares][3];
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 37:
                e = this.assets.bloques[this.indexPilares][1],
                i = -5,
                s = -50,
                a = 0;
                var o = new game.Container;
                r[1] = 20,
                r[2] = -47,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .85,
                r[0] = o;
                var h = this.assets.bloques[this.indexPilares][3];
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 38:
                e = this.assets.bloques[this.indexPilares][2],
                i = -5,
                s = -50,
                a = 0;
                var o = new game.Container;
                r[1] = 20,
                r[2] = -47,
                o.pivot.set( - o.width / 2, -o.height / 2),
                r[3] = .85,
                r[0] = o;
                var h = this.assets.bloques[this.indexPilares][3];
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexPilares = this.indexPilares + 1,
                this.indexPilares == this.maxPilares && (this.indexPilares = 0);
                break;
            case 39:
                e = this.assets.escaleras[this.indexEscaleras][0],
                i = -35,
                s = 0,
                a = 1;
                for (var o = new game.Container; e.children.length > 0;) this.sacaSprite(e.getChildAt(0), e);
                o.addTo(e),
                o.x = 75,
                o.y = 30,
                o.pivot.set( - o.width / 2, -o.height / 2),
                o.scale.set(.85, .85);
                var h = this.assets.escaleras[this.indexEscaleras][1];
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexEscaleras = this.indexEscaleras + 1,
                this.indexEscaleras == this.maxEscaleras && (this.indexEscaleras = 0);
                break;
            case 40:
                e = this.assets.escaleras[this.indexEscaleras][0],
                e.scale.set( - 1, 1),
                i = 70,
                s = 0,
                a = 1;
                for (var o = new game.Container; e.children.length > 0;) this.sacaSprite(e.getChildAt(0), e);
                o.addTo(e),
                o.x = 75,
                o.y = 30,
                o.pivot.set( - o.width / 2, -o.height / 2),
                o.scale.set(.85, .85);
                var h = this.assets.escaleras[this.indexEscaleras][1];
                h.addTo(o);
                var n = Math.floor(60 * Math.random());
                h.play("normal", n),
                h.position.set( - h.width / 2, -h.height / 2),
                this.indexEscaleras = this.indexEscaleras + 1,
                this.indexEscaleras == this.maxEscaleras && (this.indexEscaleras = 0);
                break;
            case 41:
                e = this.assets.monedas[this.indexMonedas],
                i = 11,
                s = -95,
                a = 0,
                e.play("normal"),
                e.visible = !0,
                this.indexMonedas = this.indexMonedas + 1,
                this.indexMonedas == this.maxMonedas && (this.indexMonedas = 0)
            }
            return [e, i, s, a, r]
        },
        empiezaSalto: function(t) {
            var e = 0;
            1 == this.estadoSalto[t] ? (this.setAnimSaltoPj(t, "salto", 0), 0 == this.estadoSaltoSonido && (game.audio.playSound("saltoS" + (this.personajeElegido + 1)), this.estadoSaltoSonido = 1)) : 2 == this.estadoSalto[t] && (this.setAnimSaltoPj(t, "doblesalto", 0), 1 == this.estadoSaltoSonido && (game.audio.playSound("dobleSaltoS" + (this.personajeElegido + 1)), this.estadoSaltoSonido = 2), e = 15);
            var i, s, a = t,
            r = Math.abs(this.contenedorPj[a].x - this.contenedorPj[a].x),
            n = Math.abs(this.contenedorPj[a].y - (this.contenedorPj[a].y - (this.YSalto + e)));
            0 == r ? s = n / this.speedSalto: 0 == n ? s = r / this.speedSalto: (i = Math.sqrt(Math.pow(r, 2) + Math.pow(n, 2)), s = i / this.speedSalto),
            -1 != this.estadoSalto[t] && (this.tweensPersonaje[a][0] = this.creaTween(this.contenedorPj[a], this.contenedorPj[a].x, this.contenedorPj[a].x, this.contenedorPj[a].y, this.contenedorPj[a].y - this.YSalto, s, game.Tween.Easing.Sinusoidal.Out, this.terminaSalto.bind(this, a), null, !0))
        },
        terminaSalto: function(t) {
            var e, i, s = t,
            a = Math.abs(this.contenedorPj[s].x - this.contenedorPj[s].x),
            r = Math.abs(this.contenedorPj[s].y - this.YChar);
            0 == a ? i = r / this.speedSalto: 0 == r ? i = a / this.speedSalto: (e = Math.sqrt(Math.pow(a, 2) + Math.pow(r, 2)), i = e / this.speedSalto),
            this.tweensPersonaje[s][0] = this.creaTween(this.contenedorPj[s], this.contenedorPj[s].x, this.contenedorPj[s].x, this.contenedorPj[s].y, this.YChar, i, game.Tween.Easing.Sinusoidal.In, this.reiniciaSalto.bind(this, s), null, !0)
        },
        reiniciaSalto: function(t) {
            var e = t;
            if ( - 1 != this.estadoSalto[t]) {
                0 != this.estadoSaltoSonido && (this.estadoSaltoSonido = 0),
                this.estadoSalto[e] = 0,
                this.setAnimSaltoPj(t, "aterriza", 0);
                var i, s, a = Math.abs(this.contenedorPersonaje[e].x - this.rutaPj[e][this.currentTile[e]][0].x),
                r = Math.abs(this.contenedorPersonaje[e].y - this.rutaPj[e][this.currentTile[e]][0].y);
                0 != a && 0 != r ? i = Math.sqrt(Math.pow(a, 2) + Math.pow(r, 2)) : 0 == a ? i = r: 0 == r && (i = a),
                a = Math.abs(this.contenedorPersonaje[e].x - this.rutaPj[e][this.currentTile[e] + 1][0].x),
                r = Math.abs(this.contenedorPersonaje[e].y - this.rutaPj[e][this.currentTile[e] + 1][0].y),
                0 != a && 0 != r ? s = Math.sqrt(Math.pow(a, 2) + Math.pow(r, 2)) : 0 == a ? s = r: 0 == r && (s = a);
                var n = this.currentTile[e];
                i >= s / 1.1 && (n = this.currentTile[e] + 1),
                1 == this.analizarColision(n, e) && (this.tweensPersonaje[e][1].stop(), this.remueveClon(e), this.buscaCheckPointClon(t, this.puntosFinalesClon[t], null), this.caerAlAgua(t, n, "saltando"))
            }
        },
        setGameOver: function() {
            alert("1")
        },
        reinicio: function() {},
        variablesIniciales: function() {
            this.contenedorGame.pivot.set(0, 0),
            this.contenedorGame.position.set(0, 0);
            for (var t = 1; 9 >= t; t++) this.awards[t] = !1;
            this.coins = 0,
            this.YChar = -40,
            this.YSalto = 30,
            this.tramoUsado = null,
            this.gameOver = 3,
            this.indexDelay = 1,
            this.score = 0,
            this.juegoIniciado = !1,
            this.indexRecorrido = 0,
            this.clonesActivos = new Array,
            this.levelIndex = new Array,
            this.levelStep = 0;
            for (var t = 1; t <= this.numClones; t++) this.estadoSalto[t] = -1,
            this.currentAnim[t] = "",
            this.estadoClon[t] = -1,
            this.currentTile[t] = 0,
            this.tilePorMedio[t] = 0;
            this.currentAnim[0] = "",
            this.estadoSalto[0] = 0,
            this.estadoClon[0] = -1,
            this.currentTile[0] = 0,
            this.tilePorMedio[0] = 0,
            this.indexObjetos = 0,
            this.indexPortalesE = 0,
            this.indexPortalesS = 0,
            this.indexMonedas = 0,
            this.indexTorres = 0,
            this.indexHojas = 0,
            this.indexPatos = 0,
            this.indexTuberias = 0,
            this.indexEscaleras = 0,
            this.indexPilares = 0,
            this.indexFlores = 0,
            this.indexGates = 0,
            this.indexBrillitos = 0,
            this.indexJuntadores = 0,
            this.controlNuves = 0,
            this.paramsCreadores = new Array;
            for (var t = 0; 500 >= t; t++) this.indexTiles[t] = -1,
            this.avanzePj[t] = 0,
            this.avanzePjAux[t] = 0;
            for (null != this.tweensNuves[0] && this.tweensNuves[0].stop(), null != this.tweensNuves[1] && this.tweensNuves[1].stop(), null != this.tweensPersonaje[0][1] && this.tweensPersonaje[0][1].stop(), this.removeTimer(this.hiloMapa); this.contenedorSobrePersonaje.children.length > 0;) this.sacaSprite(this.contenedorSobrePersonaje.getChildAt(0), this.contenedorSobrePersonaje);
            for (; this.contenedorBajoPersonaje.children.length > 0;) this.sacaSprite(this.contenedorBajoPersonaje.getChildAt(0), this.contenedorBajoPersonaje);
            for (; this.contenedorMapa.children.length > 0;) this.sacaSprite(this.contenedorMapa.getChildAt(0), this.contenedorMapa);
            for (; this.contenedorInGame.children.length > 0;) this.sacaSprite(this.contenedorInGame.getChildAt(0), this.contenedorInGame);
            for (; this.contenedorGame.children.length > 0;) this.sacaSprite(this.contenedorGame.getChildAt(0), this.contenedorGame);
            for (; this.contenedorNuves.children.length > 0;) this.sacaSprite(this.contenedorNuves.getChildAt(0), this.contenedorNuves);
            for (; this.contenedorMaestro.children.length > 0;) this.sacaSprite(this.contenedorMaestro.getChildAt(0), this.contenedorMaestro);
            for (var t = 0; t < this.assets.tiles.length; t++) for (var e = 0; 60 > e; e++) null != this.assets.tiles[t] && null != this.assets.tiles[t][e] && this.assets.tiles[t][e].children.length > 0 && this.sacaSprite(this.assets.tiles[t][e].getChildAt(0), this.assets.tiles[t][e]);
            this.agregaSprite(this.contenedorGame, this.contenedorMaestro, 1, 0, 0, !1),
            this.agregaSprite(this.assets.fondo, this.contenedorGame, 1, 0, 0, !1),
            this.agregaSprite(this.contenedorNuves, this.contenedorGame, 1, 0, 0, !1),
            this.agregaSprite(this.assets.nuves[0], this.contenedorNuves, 1, -80, 0, !1),
            this.agregaSprite(this.assets.nuves[1], this.contenedorNuves, 1, -100, 1.5 * this.assets.nuves[0].height, !1),
            this.agregaSprite(this.contenedorInGame, this.contenedorGame, 1, 0, 0, !1),
            this.agregaSprite(this.assets.niebla, this.contenedorGame, 1, 0, 0, !1),
            this.agregaSprite(this.contenedorMapa, this.contenedorInGame, 1, 0, 0, !1),
            this.agregaSprite(this.contenedorBajoPersonaje, this.contenedorInGame, 1, 0, 0, !1),
            this.agregaSprite(this.contenedorSobrePersonaje, this.contenedorInGame, 1, 0, 0, !1)
        },
        agregaSprite: function(t, e, i, s, a, r, n) {
            void 0 != n && null != n && (t.visible = n),
            t.addTo(e),
            t.scale.set(i, i),
            1 == r ? t.center() : (t.x = s, t.y = a)
        },
        sacaSprite: function(t, e) {
            t.scale.set(1, 1),
            t.remove(e)
        },
        creaTween: function(t, e, i, s, a, r, n, o, h, l, d, u) {
            t.x = e,
            t.y = s;
            var c = new game.Tween(t.position);
            return 1 == u ? (c.to({
                x: i,
                y: a
            },
            r), c.interpolation(game.Tween.Interpolation.CatmullRom)) : c.to({
                x: i,
                y: a
            },
            r),
            c.easing(n),
            d > 0 && c.delay(d),
            null != o && c.onComplete(o),
            null != h && c.onUpdate(h),
            c.start(),
            1 == l ? c: void 0
        },
        creaTweenScale: function(t, e, i, s, a, r, n, o) {
            var h = 1;
            0 > e && (h = -1),
            t.scale.set(e, e * h);
            var l = new game.Tween(t.scale);
            return l.to({
                x: i * h,
                y: i
            },
            s),
            l.easing(a),
            null != r && l.onComplete(r),
            null != n && l.onUpdate(n),
            l.start(),
            1 == o ? l: void 0
        },
        creaTweenAlpha: function(t, e, i, s, a, r, n, o) {
            t.alpha = e;
            var h = new game.Tween(t);
            return h.to({
                alpha: i
            },
            s),
            h.easing(a),
            null != r && h.onComplete(r),
            null != n && h.onUpdate(n),
            h.start(),
            1 == o ? h: void 0
        },
        variablesStorage: function() {
            if ("object" == typeof localStorage) try {
                localStorage.setItem("localStorage", 1),
                localStorage.removeItem("localStorage"),
                this.permitirStorage = !0
            } catch(t) {
                Storage.prototype.setItem = Storage.prototype.setItem,
                Storage.prototype.setItem = function() {},
                this.permitirStorage = !1
            }
            1 == this.permitirStorage ? (this.gameCoins = parseInt(localStorage.getItem("Coins")), (void 0 == this.gameCoins || null == this.gameCoins || 1 == isNaN(this.gameCoins)) && (this.gameCoins = 0), this.personajeElegido = parseInt(localStorage.getItem("personajeElegido")), (void 0 == this.personajeElegido || null == this.personajeElegido || 1 == isNaN(this.personajeElegido)) && (this.personajeElegido = 0), this.bestScore = parseInt(localStorage.getItem("bestScore")), (void 0 == this.bestScore || null == this.bestScore || 1 == isNaN(this.bestScore)) && (this.bestScore = 0)) : (this.gameCoins = 0, this.personajeElegido = 0, this.bestScore = 0)
        },
        update: function() {},
        keyup: function(t) {
            3 == this.gameOver && ("C" == t ? this.cheatCoins = this.cheatCoins - 1 : "N" == t && (this.cheatCoins = this.cheatCoins - 1)),
            "T" == t ? this.cheatInmortal = this.cheatInmortal - 1 : "I" == t && (this.cheatInmortal = this.cheatInmortal - 1)
        },
        keydown: function(t) {
            "SPACE" == t && this.mousedown(null, null)
        },
        mousedown: function(t, e) {
            if (0 == this.gameOver) if (0 == this.clonesActivos.length) {
                var i = 0; - 1 != this.estadoSalto[i] && (0 == this.estadoSalto[i] ? (this.estadoSalto[i] = 1, this.empiezaSalto(i)) : 1 == this.estadoSalto[i] && (this.tweensPersonaje[i][0].stop(), this.estadoSalto[i] = 2, this.empiezaSalto(i)))
            } else for (var s = 0; s < this.clonesActivos.length; s++) {
                var i = this.clonesActivos[s]; - 1 != this.estadoSalto[i] && (0 == this.estadoSalto[i] ? (null != this.tweensPersonaje[i][0] && this.tweensPersonaje[i][0].stop(), this.estadoSalto[i] = 1, this.empiezaSalto(i)) : 1 == this.estadoSalto[i] && (this.tweensPersonaje[i][0].stop(), this.estadoSalto[i] = 2, this.empiezaSalto(i)))
            }
        },
        mouseup: function(t, e) {},
        mousemove: function(t, e) {}
    })
}),
game.module("game.assets").require().body(function() {
    game.addAsset("rotate.jpg"),
    game.addAsset("logo.png"),
    game.addAsset("assets/char.png"),
    game.addAsset("assets/sombra.png"),
    game.addAsset("assets/estaticosD.png"),
    game.addAsset("assets/estaticosD.json"),
    game.addAsset("assets/flor.png"),
    game.addAsset("assets/flor.json"),
    game.addAsset("assets/fondo.jpg"),
    game.addAsset("assets/niebla.png"),
    game.addAsset("assets/cascada.png"),
    game.addAsset("assets/cascada.json"),
    game.addAsset("assets/bandera.png"),
    game.addAsset("assets/bandera.json"),
    game.addAsset("assets/brillito.png"),
    game.addAsset("assets/brillito.json"),
    game.addAsset("assets/pato-float.png"),
    game.addAsset("assets/pato-float.json"),
    game.addAsset("assets/nubes1.png"),
    game.addAsset("assets/nubes2.png"),
    game.addAsset("assets/gates-animados.png"),
    game.addAsset("assets/gates-animados.json"),
    game.addAsset("assets/juntador.png"),
    game.addAsset("assets/juntador.json"),
    game.addAsset("assets/portales.png"),
    game.addAsset("assets/portales.json"),
    game.addAsset("assets/monoA.png"),
    game.addAsset("assets/monoA.json"),
    game.addAsset("assets/splash-monoA.png"),
    game.addAsset("assets/splash-monoA.json"),
    game.addAsset("assets/FX-fusionB.png"),
    game.addAsset("assets/FX-fusionB.json"),
    game.addAsset("assets/moneda.png"),
    game.addAsset("assets/moneda.json"),
    game.addAsset("assets/pajaro.png"),
    game.addAsset("assets/pajaro.json"),
    game.addAsset("assets/GUI-menu.png"),
    game.addAsset("assets/GUI-menu.json"),
    game.addAsset("assets/GUI-gradiente.png"),
    game.addAsset("assets/GUI-BTNFX.png"),
    game.addAsset("assets/GUI-BTNFX.json"),
    game.addAsset("assets/gameover.png"),
    game.addAsset("assets/unlockFX.png"),
    game.addAsset("assets/unlockFX.json"),
    game.addAsset("assets/numeros.png"),
    game.addAsset("assets/numeros.json"),
    game.addAsset("assets/GUI-SHOP.png"),
    game.addAsset("assets/tap-to-play.png"),
    game.addAsset("assets/monoB-splash.png"),
    game.addAsset("assets/monoB-splash.json"),
    game.addAsset("assets/monoC-splash.png"),
    game.addAsset("assets/monoC-splash.json"),
    game.addAsset("assets/monoD-splash.png"),
    game.addAsset("assets/monoD-splash.json"),
    game.addAsset("assets/monoE-splash.png"),
    game.addAsset("assets/monoE-splash.json"),
    game.addAsset("assets/monoF-splash.png"),
    game.addAsset("assets/monoF-splash.json"),
    game.addAsset("assets/monoG-splash.png"),
    game.addAsset("assets/monoG-splash.json"),
    game.addAsset("assets/monoH-splash.png"),
    game.addAsset("assets/monoH-splash.json"),
    game.addAsset("assets/monoI-splash.png"),
    game.addAsset("assets/monoI-splash.json"),
    game.addAsset("assets/monoJ-splash.png"),
    game.addAsset("assets/monoJ-splash.json"),
    game.addAsset("assets/monoB.png"),
    game.addAsset("assets/monoB.json"),
    game.addAsset("assets/monoC.png"),
    game.addAsset("assets/monoC.json"),
    game.addAsset("assets/monoD.png"),
    game.addAsset("assets/monoD.json"),
    game.addAsset("assets/monoE.png"),
    game.addAsset("assets/monoE.json"),
    game.addAsset("assets/monoF.png"),
    game.addAsset("assets/monoF.json"),
    game.addAsset("assets/monoG.png"),
    game.addAsset("assets/monoG.json"),
    game.addAsset("assets/monoH.png"),
    game.addAsset("assets/monoH.json"),
    game.addAsset("assets/monoI.png"),
    game.addAsset("assets/monoI.json"),
    game.addAsset("assets/monoJ.png"),
    game.addAsset("assets/monoJ.json"),
    game.addAsset("assets/HOWTO.jpg"),
    game.addAsset("blanco.jpg"),
    game.addAsset("assets/selectormono.png"),
    game.addAsset("assets/retrybtn.png"),
    game.addAudio("audio/loop-ingameB.*", "inGameMusic"),
    game.addAudio("audio/INTRO-loopeada.*", "mainMusic"),
    game.addAudio("audio/coinA.*", "coinS"),
    game.addAudio("audio/SND-caeagua.*", "caeAguaS"),
    game.addAudio("audio/SND-doblesalto.*", "dobleSaltoS1"),
    game.addAudio("audio/SND-salto.*", "saltoS1"),
    game.addAudio("audio/SND-fusion.*", "fusionS"),
    game.addAudio("audio/SND-portalB.*", "portalS"),
    game.addAudio("audio/SND-morir.*", "morirS"),
    game.addAudio("audio/SND-nobuy.*", "noBuyS"),
    game.addAudio("audio/SND-botonabajoB.*", "botonLowS"),
    game.addAudio("audio/SND-botonabajoA.*", "botonLowS2"),
    game.addAudio("audio/SND-gateB.*", "gateS1"),
    game.addAudio("audio/SND-gateA.*", "gateS2"),
    game.addAudio("audio/SND-seleccionmono.*", "elijeMonoS"),
    game.addAudio("audio/SND-florabre.*", "florS"),
    game.addAudio("audio/SND-aleteo.*", "pajaroS"),
    game.addAudio("audio/SND-play.*", "playS"),
    game.addAudio("audio/SND-TIGRE-saltoA.*", "saltoS4"),
    game.addAudio("audio/SND-TIGRE-saltoB.*", "dobleSaltoS4"),
    game.addAudio("audio/SND-elefante-saltoA.*", "saltoS2"),
    game.addAudio("audio/SND-elefante-saltoB.*", "dobleSaltoS2"),
    game.addAudio("audio/SND-robo-saltoA.*", "saltoS3"),
    game.addAudio("audio/SND-robo-saltoB.*", "dobleSaltoS3"),
    game.addAudio("audio/SND-rabbit-saltoA.*", "saltoS5"),
    game.addAudio("audio/SND-rabbit-saltoB.*", "dobleSaltoS5"),
    game.addAudio("audio/SND-CAT-saltoA.*", "saltoS6"),
    game.addAudio("audio/SND-CAT-saltoB.*", "dobleSaltoS6"),
    game.addAudio("audio/SND-crow-saltoA.*", "saltoS8"),
    game.addAudio("audio/SND-crow-saltoB.*", "dobleSaltoS8"),
    game.addAudio("audio/SND-pollo-saltoA.*", "saltoS7"),
    game.addAudio("audio/SND-pollo-saltoB.*", "dobleSaltoS7"),
    game.addAudio("audio/SND-DOG-saltoB.*", "saltoS9"),
    game.addAudio("audio/SND-DOG-saltoA.*", "dobleSaltoS9"),
    game.addAudio("audio/SND-rana-saltoA.*", "saltoS10"),
    game.addAudio("audio/SND-rana-saltoB.*", "dobleSaltoS10"),
    game.createClass("assets", {
        tiles: [],
        chars: [],
        sombra: [],
        fondo: null,
        niebla: null,
        hojas: [],
        torres: [],
        escaleras: [],
        bloques: [],
        banderas: [],
        cascadas: [],
        flores: [],
        patos: [],
        brillitos: [],
        nuves: [],
        gates: [],
        pajaros: [],
        monedas: [],
        juntadores: [],
        portalesEntrada: [],
        portalesSalida: [],
        maxPortales: 20,
        maxTiles: 200,
        maxMonedas: 200,
        maxTorres: 20,
        maxHojas: 50,
        maxPatos: 50,
        maxTuberias: 20,
        maxEscaleras: 20,
        maxPilares: 50,
        maxFlores: 50,
        maxGates: 30,
        maxBrillitos: 100,
        maxJuntadores: 20,
        GUI: [],
        numerosScore: [],
        numerosCoins: [],
        tap: null,
        tuto: null,
        rotar: null,
        awards: [],
        logo: null,
        blanco: null,
        init: function() {
            this.rotar = new game.Sprite("rotate.jpg"),
            this.logo = new game.Sprite("logo.png"),
            this.creaAssets()
        },
        creaPajaro: function(t, e, i, s) {
            var a = new game.Animation(t);
            return a.addAnim("normal", e, {
                loop: !0,
                speed: 60
            }),
            a.addAnim("prepararse", i, {
                loop: !1,
                speed: 60
            }),
            a.addAnim("volar", s, {
                loop: !0,
                speed: 60
            }),
            a
        },
        creaBandera: function(t, e) {
            var i = new game.Animation(t);
            return i.addAnim("normal", e, {
                loop: !0,
                speed: 60
            }),
            i
        },
        creaSombraBandera: function(t, e) {
            var i = new game.Animation(t);
            return i.addAnim("normal", e, {
                loop: !0,
                speed: 60
            }),
            i
        },
        creaAssets: function() {
            var t = new Array,
            e = new Array,
            i = new Array,
            s = new Array;
            this.tap = new game.Sprite("assets/tap-to-play.png");
            for (var a = 0; 5 > a; a++) {
                this.numerosScore[a] = new Array,
                this.numerosCoins[a] = new Array;
                for (var r = 0; 10 > r; r++) this.numerosScore[a][r] = new game.Sprite("s" + r + ".png"),
                this.numerosCoins[a][r] = new game.Sprite("g" + r + ".png");
                this.numerosCoins[5] = new game.Sprite("panelgold.png")
            }
            for (var n = 0; 106 > n; n++) 9 > n ? t[n] = "pollito000" + (n + 1) + ".png": 99 > n ? t[n] = "pollito00" + (n + 1) + ".png": t[n] = "pollito0" + (n + 1) + ".png",
            68 > n ? e[n] = n: 73 > n ? i[n - 68] = n: s[n - 73] = n;
            for (var o = new Array,
            h = new Array,
            l = new Array,
            d = new Array,
            n = 0; 47 > n; n++) 9 > n ? (o[n] = "flag000" + (n + 1) + ".png", l[n] = "flag-shadow000" + (n + 1) + ".png") : (o[n] = "flag00" + (n + 1) + ".png", l[n] = "flag-shadow00" + (n + 1) + ".png"),
            h[n] = n,
            d[n] = n;
            for (var r = 0; r <= this.maxTiles; r++) {
                this.tiles[r] = new Array,
                this.tiles[r][2] = new game.Sprite("diagonal.png"),
                this.tiles[r][1] = new game.Sprite("tile-recto.png"),
                this.tiles[r][53] = new game.Sprite("tile-recto-largo.png"),
                this.tiles[r][55] = new game.Sprite("ensamble-derecho.png"),
                this.tiles[r][56] = new game.Sprite("ensamble-izquierdo.png"),
                this.tiles[r][57] = new game.Sprite("nosombra-izquierda.png"),
                this.tiles[r][58] = new game.Sprite("nosombra-derecha.png"),
                this.tiles[r][59] = new game.Sprite("tile-recto-sinsombra.png"),
                this.tiles[r][50] = new game.Sprite("tile-recto-largo-sinsombra.png"),
                this.tiles[r][51] = new game.Sprite("ensamble-derechoB.png"),
                this.tiles[r][52] = new game.Sprite("ensamble-izquierdoB.png");
                var u = new Array,
                c = new Array,
                m = new Array;
                if (r <= this.maxEscaleras && (this.escaleras[r] = new Array, this.escaleras[r][0] = new game.Sprite("escalera.png"), this.escaleras[r][1] = this.creaPajaro(t, e, i, s)), r <= this.maxTorres && (this.torres[r] = new Array, this.torres[r][0] = new game.Sprite("torre.png"), this.torres[r][1] = this.creaBandera(o, h), this.torres[r][2] = this.creaSombraBandera(l, h), this.torres[r][3] = this.creaPajaro(t, e, i, s)), r <= this.maxHojas) {
                    this.hojas[r] = new Array;
                    for (var n = 0; 5 > n; n++) this.hojas[r][n] = new game.Sprite("hoja" + (n + 1) + ".png");
                    this.hojas[r][5] = this.creaPajaro(t, e, i, s)
                }
                if (r <= this.maxPilares && (this.bloques[r] = new Array, this.bloques[r][0] = new game.Sprite("pilar.png"), this.bloques[r][1] = new game.Sprite("pilarder.png"), this.bloques[r][2] = new game.Sprite("pilarizq.png"), this.bloques[r][3] = this.creaPajaro(t, e, i, s)), r <= this.maxTuberias) {
                    this.cascadas[r] = new Array,
                    u = new Array,
                    c = new Array;
                    for (var n = 0; 15 > n; n++) 9 > n ? u[n] = "cascada000" + (n + 1) + ".png": u[n] = "cascada00" + (n + 1) + ".png",
                    c[n] = n;
                    this.cascadas[r][0] = new game.Animation(u),
                    this.cascadas[r][0].addAnim("normal", c, {
                        loop: !0,
                        speed: 60
                    }),
                    this.cascadas[r][1] = this.creaPajaro(t, e, i, s)
                }
                if (r <= this.maxMonedas) {
                    this.monedas[r] = new Array,
                    u = new Array,
                    c = new Array;
                    for (var n = 0; 29 > n; n++) 9 > n ? u[n] = "coin000" + (n + 1) + ".png": u[n] = "coin00" + (n + 1) + ".png",
                    0 != n && (c[n - 1] = n);
                    this.monedas[r] = new game.Animation(u),
                    this.monedas[r].addAnim("normal", [0], {
                        loop: !1,
                        speed: 60
                    }),
                    this.monedas[r].addAnim("comer", c, {
                        loop: !1,
                        speed: 100
                    })
                }
                if (r <= this.maxPatos) {
                    u = new Array,
                    c = new Array;
                    for (var n = 0; 50 > n; n++) 9 > n ? u[n] = "patofloat000" + (n + 1) + ".png": u[n] = "patofloat00" + (n + 1) + ".png",
                    c[n] = n;
                    this.patos[r] = new game.Animation(u),
                    this.patos[r].addAnim("normal", c, {
                        loop: !0,
                        speed: 60
                    })
                }
                if (r <= this.maxBrillitos) {
                    u = new Array,
                    c = new Array;
                    for (var n = 0; 44 > n; n++) 9 > n ? u[n] = "brillo000" + (n + 1) + ".png": u[n] = "brillo00" + (n + 1) + ".png",
                    c[n] = n;
                    this.brillitos[r] = new game.Animation(u),
                    this.brillitos[r].addAnim("normal", c, {
                        loop: !0,
                        speed: 100
                    })
                }
                if (r <= this.maxFlores) {
                    u = new Array,
                    c = new Array;
                    for (var n = 0; 24 > n; n++) 9 > n ? u[n] = "loto000" + (n + 1) + ".png": u[n] = "loto00" + (n + 1) + ".png",
                    0 != n && (c[n - 1] = n);
                    this.flores[r] = new game.Animation(u),
                    this.flores[r].addAnim("abrir", c, {
                        loop: !1,
                        speed: 50
                    }),
                    this.flores[r].addAnim("normal", [0], {
                        loop: !1,
                        speed: 50
                    })
                }
                if (r <= this.maxGates) {
                    this.gates[r] = new Array,
                    u = new Array;
                    var p = new Array;
                    c = new Array;
                    for (var n = 0; 11 > n; n++) 9 > n ? (u[n] = "gate-sombra-corrida000" + (n + 1) + ".png", p[n] = "gate-sombra-normal000" + (n + 1) + ".png") : (u[n] = "gate-sombra-corrida00" + (n + 1) + ".png", p[n] = "gate-sombra-normal00" + (n + 1) + ".png"),
                    0 != n && (c[n - 1] = n);
                    this.gates[r][0] = new game.Animation(u),
                    this.gates[r][0].addAnim("pasar", c, {
                        loop: !1,
                        speed: 60
                    }),
                    this.gates[r][0].addAnim("normal", [0], {
                        loop: !1,
                        speed: 60
                    }),
                    this.gates[r][1] = new game.Animation(p),
                    this.gates[r][1].addAnim("pasar", c, {
                        loop: !1,
                        speed: 60
                    }),
                    this.gates[r][1].addAnim("normal", [0], {
                        loop: !1,
                        speed: 60
                    })
                }
                if (r <= this.maxJuntadores) {
                    this.juntadores[r] = new Array,
                    u = new Array,
                    p = new Array,
                    c = new Array;
                    for (var n = 0; 22 > n; n++) 9 > n ? (u[n] = "juntador-abajo000" + (n + 1) + ".png", p[n] = "juntador-diagonal000" + (n + 1) + ".png") : (u[n] = "juntador-abajo00" + (n + 1) + ".png", p[n] = "juntador-diagonal00" + (n + 1) + ".png"),
                    0 != n && (c[n - 1] = n);
                    this.juntadores[r][0] = new game.Animation(u),
                    this.juntadores[r][0].addAnim("anim", c, {
                        loop: !1,
                        speed: 50
                    }),
                    this.juntadores[r][0].addAnim("normal", [0], {
                        loop: !1,
                        speed: 50
                    }),
                    this.juntadores[r][1] = new game.Animation(p),
                    this.juntadores[r][1].addAnim("anim", c, {
                        loop: !1,
                        speed: 50
                    }),
                    this.juntadores[r][1].addAnim("normal", [0], {
                        loop: !1,
                        speed: 50
                    })
                }
                if (r <= this.maxPortales) {
                    this.portalesEntrada[r] = new Array,
                    this.portalesSalida[r] = new Array,
                    u = new Array,
                    c = new Array,
                    p = new Array,
                    m = new Array;
                    for (var n = 0; 37 > n; n++) 9 > n ? (u[n] = "portal-entrada-abajo000" + (n + 1) + ".png", p[n] = "portal-entrada-derecha000" + (n + 1) + ".png") : (36 > n && (u[n] = "portal-entrada-abajo00" + (n + 1) + ".png"), p[n] = "portal-entrada-derecha00" + (n + 1) + ".png"),
                    36 > n && (c[n] = n),
                    m[n] = n;
                    for (var g = new Array,
                    f = new Array,
                    v = new Array,
                    n = 0; 20 > n; n++) g[n] = n;
                    for (var a = 0,
                    n = 20; 36 > n; n++) f[a] = n,
                    a += 1;
                    for (var a = 0,
                    n = 20; 37 > n; n++) v[a] = n,
                    a += 1;
                    this.portalesEntrada[r][0] = new game.Animation(u),
                    this.portalesEntrada[r][1] = new game.Animation(p),
                    this.portalesEntrada[r][0].addAnim("normal", g, {
                        loop: !0,
                        speed: 50
                    }),
                    this.portalesEntrada[r][0].addAnim("roto", f, {
                        loop: !1,
                        speed: 50
                    }),
                    this.portalesEntrada[r][1].addAnim("normal", g, {
                        loop: !0,
                        speed: 50
                    }),
                    this.portalesEntrada[r][1].addAnim("roto", v, {
                        loop: !1,
                        speed: 50
                    }),
                    this.portalesEntrada[r][3] = new game.Sprite("portalderechasombra.png"),
                    this.portalesEntrada[r][4] = new game.Sprite("portalabajosombra.png"),
                    u = new Array,
                    c = new Array,
                    p = new Array,
                    m = new Array;
                    for (var n = 0; 47 > n; n++) 9 > n ? (u[n] = "portal-salida-abajo000" + (n + 1) + ".png", p[n] = "portal-salida-derecha000" + (n + 1) + ".png") : (46 > n && (p[n] = "portal-salida-derecha00" + (n + 1) + ".png"), u[n] = "portal-salida-abajo00" + (n + 1) + ".png"),
                    46 > n && (m[n] = n),
                    c[n] = n;
                    g = new Array,
                    f = new Array,
                    v = new Array;
                    for (var n = 0; 20 > n; n++) g[n] = n;
                    for (var a = 0,
                    n = 20; 47 > n; n++) f[a] = n,
                    a += 1;
                    a = 0;
                    for (var n = 20; 46 > n; n++) v[a] = n,
                    a += 1;
                    this.portalesSalida[r][0] = new game.Animation(u),
                    this.portalesSalida[r][1] = new game.Animation(p),
                    this.portalesSalida[r][0].addAnim("normal", g, {
                        loop: !0,
                        speed: 50
                    }),
                    this.portalesSalida[r][0].addAnim("roto", f, {
                        loop: !1,
                        speed: 50
                    }),
                    this.portalesSalida[r][1].addAnim("normal", g, {
                        loop: !0,
                        speed: 50
                    }),
                    this.portalesSalida[r][1].addAnim("roto", v, {
                        loop: !1,
                        speed: 50
                    }),
                    this.portalesSalida[r][3] = new game.Sprite("portalderechasombra.png"),
                    this.portalesSalida[r][4] = new game.Sprite("portalabajosombra.png")
                }
            }
            this.nuves[0] = new game.Sprite("assets/nubes1.png"),
            this.nuves[1] = new game.Sprite("assets/nubes2.png"),
            this.fondo = new game.Sprite("assets/fondo.jpg"),
            this.niebla = new game.Sprite("assets/niebla.png"),
            this.tuto = new game.Sprite("assets/HOWTO.jpg"),
            this.GUI[0] = new game.Sprite("GUI-back.png"),
            this.GUI[1] = new game.Sprite("GUI-options.png"),
            this.GUI[2] = new game.Sprite("GUI-title.png"),
            this.GUI[3] = new game.Sprite("assets/GUI-gradiente.png"),
            this.logo.addTo(this.GUI[3]),
            this.logo.position.set(game.system.width / 2 - this.logo.width / 2, game.system.height - 1.2 * this.logo.height),
            this.GUI[10] = new game.Sprite("GUI-moregames.png"),
            this.GUI[5] = new game.Sprite("GUI-selectormono.png"),
            this.GUI[6] = new game.Sprite("GUI-sonidoOFF.png"),
            this.GUI[7] = new game.Sprite("GUI-sonidoON.png"),
            this.GUI[8] = new game.Sprite("UNLOCK-abajo.png"),
            this.GUI[9] = new game.Sprite("UNLOCK-arriba.png"),
            this.GUI[30] = new game.Sprite("assets/gameover.png"),
            this.GUI[31] = new game.Sprite("assets/GUI-SHOP.png"),
            this.GUI[32] = new game.Sprite("assets/retrybtn.png");
            for (var r = 1; 10 >= r; r++) this.GUI[10 + r] = new game.Sprite("mono" + r + ".png");
            for (var x = new Array,
            y = new Array,
            b = new Array,
            w = new Array,
            n = 0; 57 > n; n++) 9 > n ? (x[n] = "triangle-down000" + (n + 1) + ".png", 51 > n && (y[n] = "triangle-up000" + (n + 1) + ".png")) : (x[n] = "triangle-down00" + (n + 1) + ".png", 51 > n && (y[n] = "triangle-up00" + (n + 1) + ".png")),
            0 != n && (b[n - 1] = n, 51 > n && (w[n - 1] = n));
            for (var r = 1; 10 >= r; r++) r % 2 == 0 ? (this.GUI[40 + r] = new game.Animation(x), this.GUI[40 + r].addAnim("stand", [0], {
                loop: !1,
                speed: 100
            }), this.GUI[40 + r].addAnim("anim", b, {
                loop: !1,
                speed: 100
            })) : (this.GUI[40 + r] = new game.Animation(y), this.GUI[40 + r].addAnim("stand", [0], {
                loop: !1,
                speed: 100
            }), this.GUI[40 + r].addAnim("anim", w, {
                loop: !1,
                speed: 100
            }));
            for (var r = 1; 10 >= r; r++) this.GUI[50 + r] = new game.Container,
            this.GUI[50 + r].addChild(new game.Sprite("assets/selectormono.png")),
            this.GUI[50 + r].getChildAt(0).position.set( - 8, -10);
            x = new Array,
            b = new Array;
            for (var n = 0; 54 > n; n++) 9 > n ? x[n] = "linea000" + (n + 1) + ".png": x[n] = "linea00" + (n + 1) + ".png",
            b[n] = n;
            this.GUI[4] = new game.Animation(x),
            this.GUI[4].addAnim("normal", b, {
                loop: !1,
                speed: 60
            }),
            x = new Array,
            b = new Array;
            for (var n = 0; 12 > n; n++) 9 > n ? x[n] = "GUI-BTNFX-left000" + (n + 1) + ".png": x[n] = "GUI-BTNFX-left00" + (n + 1) + ".png",
            b[n] = n;
            this.GUI[21] = new game.Animation(x),
            this.GUI[21].addAnim("normal", b, {
                loop: !1,
                speed: 60
            }),
            x = new Array,
            b = new Array;
            for (var n = 0; 16 > n; n++) 9 > n ? x[n] = "GUI-BTNFX-hexa000" + (n + 1) + ".png": x[n] = "GUI-BTNFX-hexa00" + (n + 1) + ".png",
            b[n] = n;
            this.GUI[24] = new game.Animation(x),
            this.GUI[24].addAnim("normal", b, {
                loop: !1,
                speed: 60
            }),
            x = new Array,
            b = new Array;
            for (var n = 0; 12 > n; n++) 9 > n ? x[n] = "GUI-BTNFX-right000" + (n + 1) + ".png": x[n] = "GUI-BTNFX-right00" + (n + 1) + ".png",
            b[n] = n;
            this.GUI[22] = new game.Animation(x),
            this.GUI[22].addAnim("normal", b, {
                loop: !1,
                speed: 60
            }),
            x = new Array,
            b = new Array;
            for (var n = 0; 20 > n; n++) 9 > n ? x[n] = "GUI-BTNFX-playshop000" + (n + 1) + ".png": x[n] = "GUI-BTNFX-playshop00" + (n + 1) + ".png",
            b[n] = n;
            this.GUI[23] = new game.Animation(x),
            this.GUI[23].addAnim("normal", b, {
                loop: !1,
                speed: 60
            });
            var S = this.creaMonos("");
            this.chars[0] = S[0],
            this.sombra[0] = S[1],
            S = this.creaMonos("B"),
            this.chars[1] = S[0],
            this.sombra[1] = S[1],
            S = this.creaMonos("C"),
            this.chars[2] = S[0],
            this.sombra[2] = S[1],
            S = this.creaMonos("D"),
            this.chars[3] = S[0],
            this.sombra[3] = S[1],
            S = this.creaMonos("E"),
            this.chars[4] = S[0],
            this.sombra[4] = S[1],
            S = this.creaMonos("F"),
            this.chars[5] = S[0],
            this.sombra[5] = S[1],
            S = this.creaMonos("G"),
            this.chars[6] = S[0],
            this.sombra[6] = S[1],
            S = this.creaMonos("H"),
            this.chars[7] = S[0],
            this.sombra[7] = S[1],
            S = this.creaMonos("I"),
            this.chars[8] = S[0],
            this.sombra[8] = S[1],
            S = this.creaMonos("J"),
            this.chars[9] = S[0],
            this.sombra[9] = S[1]
        },
        creaMonos: function(t) {
            for (var e = new Array,
            i = new Array,
            s = 0; 20 > s; s++) {
                i[s] = new Array;
                var a = new Array,
                r = new Array,
                n = new Array,
                o = new Array,
                h = new Array,
                l = new Array,
                d = new Array,
                u = (new Array, new Array, new Array, new Array),
                c = new Array,
                m = (new Array, new Array, new Array, new Array, new Array),
                p = new Array,
                g = new Array,
                f = new Array,
                v = new Array,
                x = new Array,
                y = new Array;
                e[s] = new Array;
                var b = new Array,
                w = new Array;
                i[s][0] = new game.Sprite("sombramono.png"),
                i[s][1] = new game.Sprite("sombramono.png"),
                i[s][2] = new game.Sprite("sombramono.png"),
                i[s][1].addTo(i[s][0]),
                i[s][1].position.set(0, 0);
                for (var S = 0; 43 > S; S++) 9 > S ? (b[S] = "cuerpo" + t + "-abajo000" + (S + 1) + ".png", b[S + 43] = "cuerpo" + t + "-diagonal000" + (S + 1) + ".png") : (b[S] = "cuerpo" + t + "-abajo00" + (S + 1) + ".png", b[S + 43] = "cuerpo" + t + "-diagonal00" + (S + 1) + ".png"),
                a[S] = S,
                r[S] = S + 43;
                for (var S = 0; 87 > S; S++) 9 > S ? w[S] = "cabeza" + t + "-abajo000" + (S + 1) + ".png": w[S] = "cabeza" + t + "-abajo00" + (S + 1) + ".png",
                43 > S ? o[S] = S: 47 > S ? c[S - 46] = S: 51 > S ? g[S - 47] = S: 87 > S && (f[S - 51] = S);
                for (var A = 87,
                S = 0; 100 > S; S++) 9 > S ? w[A] = "cabeza" + t + "-diagonal000" + (S + 1) + ".png": 99 > S ? w[A] = "cabeza" + t + "-diagonal00" + (S + 1) + ".png": w[A] = "cabeza" + t + "-diagonal0" + (S + 1) + ".png",
                43 > S ? n[S] = A: 47 > S ? u[S - 46] = A: 51 > S ? m[S - 47] = A: 87 > S ? p[S - 51] = A: 93 > S ? v[S - 87] = A: 100 > S && (y[S - 93] = A),
                A += 1;
                for (var S = 0; 30 > S; S++) 9 > S ? (w[A] = "splash" + t + "-abajo000" + (S + 1) + ".png", w[A + 30] = "splash" + t + "-diagonal000" + (S + 1) + ".png") : (w[A] = "splash" + t + "-abajo00" + (S + 1) + ".png", w[A + 30] = "splash" + t + "-diagonal00" + (S + 1) + ".png"),
                h[S] = A,
                l[S] = A + 30,
                A += 1;
                A += 30;
                for (var S = 0; 30 > S; S++) 9 > S ? w[A] = "FX-fusion000" + (S + 1) + ".png": w[A] = "FX-fusion00" + (S + 1) + ".png",
                d[S] = A,
                A += 1;
                for (var A = 0,
                S = v.length - 1; S >= 0; S--) x[A] = v[S],
                A += 1;
                e[s][0] = new game.Animation(b),
                e[s][0].addAnim("correr", a, {
                    loop: !0,
                    speed: 100
                }),
                e[s][0].addAnim("correrIzq", r, {
                    loop: !0,
                    speed: 100
                }),
                e[s][1] = new game.Animation(b),
                e[s][1].addAnim("correrDer", r, {
                    loop: !0,
                    speed: 100
                }),
                e[s][1].scale.set( - 1, 1),
                e[s][2] = new game.Animation(w),
                e[s][2].addAnim("correr", a, {
                    loop: !0,
                    speed: 100
                }),
                e[s][2].addAnim("salto", c, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("aterriza", g, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("doblesalto", f, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("correrIzq", n, {
                    loop: !0,
                    speed: 100
                }),
                e[s][2].addAnim("saltoIzq", u, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("aterrizaIzq", m, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("doblesaltoIzq", p, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("giroCabezaIzqCentro", v, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("giroCabezaCentroIzq", x, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("giroCabezaIzqDer", y, {
                    loop: !1,
                    speed: 100
                }),
                e[s][2].addAnim("splashIzq", l, {
                    loop: !1,
                    speed: 60
                }),
                e[s][2].addAnim("splashCentro", h, {
                    loop: !1,
                    speed: 60
                }),
                e[s][2].addAnim("FXfusion", d, {
                    loop: !1,
                    speed: 80
                }),
                e[s][3] = new game.Animation(w),
                e[s][3].addAnim("correrDer", n, {
                    loop: !0,
                    speed: 100
                }),
                e[s][3].addAnim("saltoDer", u, {
                    loop: !1,
                    speed: 100
                }),
                e[s][3].addAnim("aterrizaDer", m, {
                    loop: !1,
                    speed: 100
                }),
                e[s][3].addAnim("doblesaltoDer", p, {
                    loop: !1,
                    speed: 100
                }),
                e[s][3].addAnim("giroCabezaDerCentro", v, {
                    loop: !1,
                    speed: 100
                }),
                e[s][3].addAnim("giroCabezaCentroDer", x, {
                    loop: !1,
                    speed: 100
                }),
                e[s][3].addAnim("giroCabezaDerIzq", y, {
                    loop: !1,
                    speed: 100
                }),
                e[s][3].addAnim("splashDer", l, {
                    loop: !1,
                    speed: 60
                }),
                e[s][3].addAnim("FXfusion", d, {
                    loop: !1,
                    speed: 80
                }),
                e[s][3].scale.set( - 1, 1),
                e[s][4] = new game.Sprite("assets/char.png")
            }
            return [e, i]
        }
    })
}),
game.module("game.title").body(function() {
    game.createClass("title", {
        ruta: null,
        menuIniciado: !1,
        Select: null,
        clickSound: null,
        clickStart: !1,
        colorIndex: 1,
        sacarBrillo: !1,
        ponerBrillo: !1,
        conBrillo: null,
        botonesMain: null,
        opcionesMain: null,
        tittleMain: null,
        lineaMain: null,
        fondoMain: null,
        muteb: [],
        moreb: null,
        playb: null,
        shopb: null,
        indexMute: 0,
        animBizq: null,
        animBder: null,
        animBcenter: null,
        accion: null,
        botonIos: null,
        textDelay: 50,
        menuIniciado: !1,
        moreGamesWH: null,
        init: function(t, e) {
            if (this.ruta = t, this.moreb = this.ruta.assets.GUI[10], this.opcionesMain = this.ruta.assets.GUI[1], this.tittleMain = this.ruta.assets.GUI[2], this.fondoMain = this.ruta.assets.GUI[3], this.lineaMain = this.ruta.assets.GUI[4], this.muteb[0] = this.ruta.assets.GUI[6], this.muteb[1] = this.ruta.assets.GUI[7], 1 == this.ruta.sonido ? this.indexMute = 1 : this.indexMute = 0, this.animBizq = this.ruta.assets.GUI[21], this.animBder = this.ruta.assets.GUI[22], this.animBcenter = this.ruta.assets.GUI[23], 1 == e) {
                game.device.iPhone || game.device.iPad || game.audio.playMusic("mainMusic", !0),
                this.colorMatrix = [1, 0, 0, this.colorIndex, 0, 1, 0, this.colorIndex, 0, 0, 1, this.colorIndex, 0, 0, 0, 1];
                var i = new game.PIXI.ColorMatrixFilter;
                i.matrix = this.colorMatrix,
                this.ruta.contenedorMaestro.filters = [i],
                this.poneMenu(1),
                this.sacaBrillo()
            } else this.colorIndex = 0,
            this.poneMenu(1),
            this.tittleMain.visible = !0,
            this.ruta.creaTweenAlpha(this.tittleMain, 0, 1, 500, game.Tween.Easing.Sinusoidal.Out, this.poneMenu.bind(this, 2), null)
        },
        sacaBrillo: function() {
            this.sacarBrillo = !0
        },
        poneMenu: function(t) {
            var e = 100 * game.system.height / 900 / 100;
            this.moreGamesWH = new game.Point(this.moreb.width, this.moreb.height);
            var i = new game.Point(this.muteb[0].width, this.muteb[0].height);
            switch (t) {
            case 1:
                this.ruta.agregaSprite(this.fondoMain, this.ruta.contenedorMaestro, 1, 0, 0, !1),
                this.ruta.agregaSprite(this.tittleMain, this.ruta.contenedorMaestro, e, game.system.width / 2 - this.tittleMain.width / 2 * e, this.tittleMain.height / 2 * e - 100 * e, !1, !1),
                this.ruta.agregaSprite(this.lineaMain, this.ruta.contenedorMaestro, e, game.system.width / 2 - this.lineaMain.width / 2 * e, this.tittleMain.height / 2 * e - 100 * e + 340 * e, !1, !1),
                this.ruta.agregaSprite(this.ruta.assets.tap, this.ruta.contenedorMaestro, e, game.system.width / 2 - this.ruta.assets.tap.width / 2 * e, game.system.height / 2 + 4 * this.ruta.assets.tap.height * e, !1, !1),
                this.ruta.agregaSprite(this.opcionesMain, this.ruta.contenedorMaestro, e, game.system.width / 2 - this.opcionesMain.width / 2 * e, game.system.height / 2 + this.opcionesMain.height / 14 * e, !1, !1),
                this.ruta.agregaSprite(this.moreb, this.ruta.contenedorMaestro, e, game.system.width - this.moreb.width * e, game.system.height - this.moreb.height * e, !1, !1),
                this.ruta.agregaSprite(this.muteb[0], this.ruta.contenedorMaestro, e, 0, game.system.height - i.y * e, !1, !1),
                this.ruta.agregaSprite(this.muteb[1], this.ruta.contenedorMaestro, e, 0, game.system.height - i.y * e, !1, !1);
                break;
            case 2:
                this.lineaMain.visible = !0,
                this.lineaMain.play("normal", 0),
                this.lineaMain.anims.normal.onComplete = this.poneMenu.bind(this, 3);
                break;
            case 3:
                this.menuIniciado = !0,
                this.botonIos = new game.Container,
                this.botonIos.hitArea = new game.HitRectangle(0, 0, game.system.width, game.system.height),
                this.botonIos.addTo(this.ruta.stage),
                this.botonIos.interactive = !0,
                this.botonIos.mousedown = this.botonIos.touchstart = this.fallaIphone.bind(this),
                this.botonIos.mouseup = this.botonIos.touchend = this.fallaIphone2.bind(this),
                null != Api && void 0 != LOGOimg && null != LOGOimg && (LOGOimg.visibility = "visible");
                break;
            case 4:
                this.muteb[this.indexMute].visible = !0,
                this.moreb.visible = !0,
                this.poneEventos(),
                this.ruta.creaTweenAlpha(this.muteb[this.indexMute], 0, 1, 600, game.Tween.Easing.Sinusoidal.Out, null, null),
                this.ruta.creaTweenAlpha(this.moreb, 0, 1, 600, game.Tween.Easing.Sinusoidal.Out, this.cambiaMoreGames.bind(this), null)
            }
        },
        fallaIphone: function() {},
        fallaIphone2: function() {
            this.ruta.sacaSprite(this.botonIos, this.ruta.stage),
            this.botonIos.interactive = !1,
            game.audio.playSound("botonLowS2"),
            (game.device.iPhone || game.device.iPad) && 0 == this.ruta.iphoneMusica && (game.audio.playMusic("mainMusic", !0), this.ruta.iphoneMusica = !0),
            this.opcionesMain.visible = !0,
            this.menuIniciado = !1,
            this.ruta.sacaSprite(this.ruta.assets.tap, this.ruta.contenedorMaestro),
            this.ruta.creaTweenAlpha(this.opcionesMain, 0, 1, 500, game.Tween.Easing.Sinusoidal.Out, this.poneMenu.bind(this, 4), null)
        },
        cambiaMoreGames: function() {
            this.moreb.visible = !1,
            null != Api && void 0 != LOGOimg && null != LOGOimg && (game.device.mobile ? moreGamesimg.visibility = "visible": moreGamesimg.visibility = "visible")
        },
        poneEventos: function() {
            this.playb = new game.Container,
            this.playb.hitArea = new game.HitRectangle(6, 36, 230, 90),
            this.playb.addTo(this.opcionesMain),
            this.shopb = new game.Container,
            this.shopb.hitArea = new game.HitRectangle(6, 181, 230, 90),
            this.shopb.addTo(this.opcionesMain),
            this.shopb.interactive = !0,
            this.playb.interactive = !0,
            this.muteb[0].interactive = !0,
            this.muteb[1].interactive = !0,
            this.shopb.click = this.shopb.touchstart = this.clickShop.bind(this),
            this.playb.click = this.playb.touchstart = this.clickPlay.bind(this),
            this.muteb[0].click = this.muteb[0].touchstart = this.clickMute.bind(this),
            this.muteb[1].click = this.muteb[1].touchstart = this.clickMute.bind(this)
        },
        sacaEventos: function() {
            this.shopb.interactive = !1,
            this.playb.interactive = !1,
            this.moreb.interactive = !1,
            this.muteb[0].interactive = !1,
            this.muteb[1].interactive = !1
        },
        mataMenu: function() {
            this.ruta.sacaSprite(this.shopb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.moreb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.playb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.muteb[0], this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.muteb[1], this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.shopb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.opcionesMain, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.tittleMain, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.lineaMain, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.fondoMain, this.ruta.contenedorMaestro),
            null != Api && void 0 != LOGOimg && null != LOGOimg && (moreGamesimg.visibility = "hidden"),
            this.ruta.removeObject(this.ruta.menu),
            this.ruta.menu = null,
            this.determinarAccion()
        },
        clickShop: function(t) {
            game.audio.playSound("botonLowS"),
            this.animBcenter.addTo(this.shopb),
            this.animBcenter.position.set(4, 177),
            this.animBcenter.play("normal", 0),
            this.animBcenter.anims.normal.onComplete = this.ruta.llamaAccion.bind(this.ruta, 30, this.terminarMenu.bind(this, "shop")),
            this.sacaEventos()
        },
        clickPlay: function(t) {
            game.audio.playSound("playS"),
            this.animBcenter.addTo(this.playb),
            this.animBcenter.position.set(4, 32),
            this.animBcenter.play("normal", 0),
            this.animBcenter.anims.normal.onComplete = this.ruta.llamaAccion.bind(this.ruta, 30, this.terminarMenu.bind(this, "empezarJuego")),
            this.sacaEventos(),
            null != Api && void 0 != LOGOimg && null != LOGOimg && (LOGOimg.visibility = "hidden", moreGamesimg.visibility = "hidden", this.moreb.visible = !0)
        },
        terminarMenu: function(t) {
            if (this.accion = t, "empezarJuego" == t) {
                this.colorMatrix = [1, 0, 0, this.colorIndex, 0, 1, 0, this.colorIndex, 0, 0, 1, this.colorIndex, 0, 0, 0, 1];
                var e = new game.PIXI.ColorMatrixFilter;
                e.matrix = this.colorMatrix,
                this.ruta.contenedorMaestro.filters = [e],
                this.ponerBrillo = !0
            } else this.mataMenu()
        },
        clickMoreGames: function(t) {
            game.audio.playSound("botonLowS"),
            this.animBder.addTo(this.moreb),
            this.animBder.position.set( - 27, -22),
            this.animBder.play("normal", 0);
            var e = Api.Branding.getLink("more_games");
            e.action()
        },
        clickMute: function(t) {
            this.animBizq.position.set(0, -23),
            this.animBizq.play("normal", 0),
            1 == this.indexMute ? (game.audio.playSound("botonLowS2"), this.indexMute = 0, this.muteb[1].visible = !1, this.muteb[0].visible = !0, this.animBizq.addTo(this.muteb[0]), this.ruta.sonido = !1, game.audio.muteMusic(), game.audio.muteSound()) : 0 == this.indexMute && (game.audio.playSound("botonLowS"), this.indexMute = 1, this.muteb[0].visible = !1, this.muteb[1].visible = !0, this.animBizq.addTo(this.muteb[1]), this.ruta.sonido = !0, game.audio.unmuteMusic(), game.audio.unmuteSound())
        },
        eventoTutorial: function() {
            this.ruta.assets.tuto.interactive = !0,
            this.ruta.assets.tuto.click = this.ruta.assets.tuto.touchstart = this.empezarGame.bind(this)
        },
        sacarTutorial: function() {
            this.ruta.sacaSprite(this.ruta.assets.tuto, this.ruta.stage),
            this.ruta.empezarGame()
        },
        empezarGame: function(t) {
            this.ruta.assets.tuto.interactive = !1,
            this.ruta.creaTweenAlpha(this.ruta.assets.tuto, 1, 0, 200, game.Tween.Easing.Sinusoidal.Out, this.sacarTutorial.bind(this), null)
        },
        determinarAccion: function() {
            switch (this.accion) {
            case "empezarJuego":
                game.audio.stopMusic(),
                game.audio.setMusicVolume(1),
                this.ruta.agregaSprite(this.ruta.assets.tuto, this.ruta.stage, 1, 0, 0, !1),
                this.ruta.assets.tuto.width = game.system.width,
                this.ruta.assets.tuto.height = game.system.height,
                this.ruta.creaTweenAlpha(this.ruta.assets.tuto, 0, 1, 450, game.Tween.Easing.Sinusoidal.Out, this.eventoTutorial.bind(this), null);
                break;
            case "shop":
                null != Api && void 0 != LOGOimg && null != LOGOimg && (LOGOimg.visibility = "hidden"),
                null != Api && void 0 != LOGOimg && null != LOGOimg && (moreGamesimg.visibility = "hidden"),
                this.ruta.Shop = new game.shop(this.ruta, "title")
            }
        },
        update: function() {
            1 == this.menuIniciado && (this.textDelay <= 30 ? 0 == this.ruta.assets.tap.visible && (this.ruta.assets.tap.visible = !0) : 1 == this.ruta.assets.tap.visible && (this.ruta.assets.tap.visible = !1), this.textDelay = this.textDelay + 1, this.textDelay >= 60 && (this.textDelay = 0)),
            1 == this.sacarBrillo ? (this.colorIndex = this.colorIndex - .008 * game.system.delta * 100, this.colorIndex < 0 && (this.colorIndex = 0), this.colorMatrix[3] = this.colorIndex, this.colorMatrix[7] = this.colorIndex, this.colorMatrix[11] = this.colorIndex, 0 == this.colorIndex && (this.sacarBrillo = !1, this.ruta.contenedorMaestro.filters = null, this.tittleMain.visible = !0, this.ruta.creaTweenAlpha(this.tittleMain, 0, 1, 1200, game.Tween.Easing.Sinusoidal.Out, this.poneMenu.bind(this, 2), null))) : 1 == this.ponerBrillo && (this.colorIndex = this.colorIndex + .004 * game.system.delta * 100, this.colorIndex > 1 && (this.colorIndex = 1), "empezarJuego" == this.accion && (game.audio.musicVolume < 0 && (game.audio.musicVolume = 0), 1 == this.ruta.sonido && game.audio.setMusicVolume(game.audio.musicVolume - .005)), this.colorMatrix[3] = this.colorIndex, this.colorMatrix[7] = this.colorIndex, this.colorMatrix[11] = this.colorIndex, 1 == this.colorIndex && (this.ponerBrillo = !1, this.mataMenu()))
        }
    })
}),
game.module("game.gameover").body(function() {
    game.createClass("gameover", {
        ruta: null,
        colorIndex: 0,
        ponerBrillo: !1,
        conBrillo: null,
        muteb: [],
        moreb: null,
        retryb: null,
        shopb: null,
        fondo: null,
        indexMute: 0,
        animBizq: null,
        animBder: null,
        animBcenter: null,
        accion: null,
        textos: [],
        fondoMain: null,
        primeraVez: null,
        conSonido: !1,
        moreGamesWH: null,
        init: function(t, e) {
            this.ruta = t,
            this.primeraVez = e,
            this.moreb = this.ruta.assets.GUI[10],
            this.muteb[0] = this.ruta.assets.GUI[6],
            this.muteb[1] = this.ruta.assets.GUI[7],
            this.fondo = this.ruta.assets.GUI[30],
            1 == this.ruta.sonido ? this.indexMute = 1 : this.indexMute = 0,
            this.animBizq = this.ruta.assets.GUI[21],
            this.animBder = this.ruta.assets.GUI[22],
            this.animBcenter = this.ruta.assets.GUI[24],
            this.fondoMain = this.ruta.assets.GUI[3],
            this.poneMenu(1)
        },
        seteaScore: function() {
            var t;
            t = this.ruta.score < 10 ? "0000" + this.ruta.score: this.ruta.score < 100 ? "000" + this.ruta.score: this.ruta.score < 1e3 ? "00" + this.ruta.score: this.ruta.score < 1e4 ? "0" + this.ruta.score: "" + this.ruta.score;
            var e;
            e = this.ruta.bestScore < 10 ? "0000" + this.ruta.bestScore: this.ruta.bestScore < 100 ? "000" + this.ruta.bestScore: this.ruta.bestScore < 1e3 ? "00" + this.ruta.bestScore: this.ruta.bestScore < 1e4 ? "0" + this.ruta.bestScore: "" + this.ruta.bestScore,
            this.textos[0] = new game.PIXI.Text(t, {
                font: "48px Arial",
                fill: "#FFFFFF"
            }),
            this.ruta.agregaSprite(this.textos[0], this.fondo, 1, game.system.width / 2 - this.textos[0].width / 3, 178, !1),
            this.textos[1] = new game.PIXI.Text(e, {
                font: "48px Arial",
                fill: "#FFFFFF"
            }),
            this.ruta.agregaSprite(this.textos[1], this.fondo, 1, game.system.width / 2 - this.textos[1].width / 3, 404, !1)
        },
        poneMenu: function(t) {
            var e = 100 * game.system.height / 900 / 100;
            this.moreGamesWH = new game.Point(this.moreb.width, this.moreb.height);
            var i = new game.Point(this.muteb[0].width, this.muteb[0].height);
            switch (t) {
            case 1:
                this.ruta.agregaSprite(this.fondoMain, this.ruta.contenedorMaestro, 1, 0, 0, !1, !0),
                this.ruta.agregaSprite(this.fondo, this.ruta.contenedorMaestro, e, game.system.width / 2 - this.fondo.width / 2 * e, 0, !1, !0),
                this.ruta.agregaSprite(this.moreb, this.ruta.contenedorMaestro, e, game.system.width - this.moreb.width * e, game.system.height - this.moreb.height * e, !1, !1),
                this.ruta.agregaSprite(this.muteb[0], this.ruta.contenedorMaestro, e, 0, game.system.height - i.y * e, !1, !1),
                this.ruta.agregaSprite(this.muteb[1], this.ruta.contenedorMaestro, e, 0, game.system.height - i.y * e, !1, !1),
                this.seteaScore(),
                "salto" != this.primeraVez ? (1 == this.primeraVez && this.ruta.creaTweenAlpha(this.fondoMain, 0, 1, 700, game.Tween.Easing.Sinusoidal.Out, null, null), this.ruta.creaTweenAlpha(this.fondo, 0, 1, 600, game.Tween.Easing.Sinusoidal.Out, this.poneMenu.bind(this, 2), null)) : (this.fondo.visible = !1, this.poneEventos(), this.sacaEventos(), this.terminarMenu("empezarJuego"));
                break;
            case 2:
                this.muteb[this.indexMute].visible = !0,
                this.moreb.visible = !0,
                this.ruta.creaTweenAlpha(this.muteb[this.indexMute], 0, 1, 800, game.Tween.Easing.Sinusoidal.Out, null, null),
                this.ruta.creaTweenAlpha(this.moreb, 0, 1, 800, game.Tween.Easing.Sinusoidal.Out, this.cambiaMoreGames.bind(this), null),
                null != Api && void 0 != LOGOimg && null != LOGOimg && (LOGOimg.visibility = "visible"),
                null != Api ? Api.GameBreak.request(this.pauseGame.bind(this), this.resumeGame.bind(this)) : this.poneEventos()
            }
        },
        pauseGame: function() {
            game.audio.muteSound(),
            game.audio.muteMusic()
        },
        resumeGame: function() {
            1 == this.ruta.sonido && (game.audio.unmuteMusic(), game.audio.unmuteSound()),
            this.poneEventos()
        },
        poneEventos: function() {
            this.retryb = new game.Container,
            this.retryb.hitArea = new game.HitRectangle(111, 570, 130, 130),
            this.retryb.addTo(this.fondo),
            this.shopb = new game.Container,
            this.shopb.hitArea = new game.HitRectangle(311, 570, 130, 130),
            this.shopb.addTo(this.fondo),
            this.shopb.interactive = !0,
            this.retryb.interactive = !0,
            this.muteb[0].interactive = !0,
            this.muteb[1].interactive = !0,
            this.shopb.click = this.shopb.touchstart = this.clickShop.bind(this),
            this.retryb.click = this.retryb.touchstart = this.clickPlay.bind(this),
            this.muteb[0].click = this.muteb[0].touchstart = this.clickMute.bind(this),
            this.muteb[1].click = this.muteb[1].touchstart = this.clickMute.bind(this)
        },
        sacaEventos: function() {
            this.shopb.interactive = !1,
            this.retryb.interactive = !1,
            this.moreb.interactive = !1,
            this.muteb[0].interactive = !1,
            this.muteb[1].interactive = !1
        },
        mataMenu: function() {
            for (var t = 0; 2 > t; t++) this.ruta.sacaSprite(this.textos[t], this.textos[t].parent);
            this.ruta.sacaSprite(this.shopb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.moreb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.retryb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.muteb[0], this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.muteb[1], this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.fondo, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.fondoMain, this.ruta.contenedorMaestro),
            this.ruta.removeObject(this.ruta.GameOver),
            this.ruta.GameOver = null,
            null != Api && void 0 != LOGOimg && null != LOGOimg && (LOGOimg.visibility = "hidden"),
            null != Api && void 0 != LOGOimg && null != LOGOimg && (moreGamesimg.visibility = "hidden"),
            this.determinarAccion()
        },
        cambiaMoreGames: function() {
            this.moreb.visible = !1,
            null != Api && void 0 != LOGOimg && null != LOGOimg && (game.device.mobile ? moreGamesimg.visibility = "visible": moreGamesimg.visibility = "visible")
        },
        clickShop: function(t) {
            game.audio.playSound("botonLowS"),
            this.animBcenter.addTo(this.shopb),
            this.animBcenter.position.set(279, 523),
            this.animBcenter.play("normal", 0),
            this.animBcenter.anims.normal.onComplete = this.ruta.llamaAccion(30, this.terminarMenu.bind(this, "shop")),
            this.sacaEventos()
        },
        clickPlay: function(t) {
            game.audio.playSound("playS"),
            this.animBcenter.addTo(this.retryb),
            this.animBcenter.position.set(79, 523),
            this.animBcenter.play("normal", 0),
            this.animBcenter.anims.normal.onComplete = this.ruta.llamaAccion(30, this.terminarMenu.bind(this, "empezarJuego")),
            moreGamesimg.visibility = "hidden",
            this.moreb.visible = !0,
            this.sacaEventos()
        },
        terminarMenu: function(t) {
            if (this.accion = t, "empezarJuego" == t) {
                this.colorMatrix = [1, 0, 0, this.colorIndex, 0, 1, 0, this.colorIndex, 0, 0, 1, this.colorIndex, 0, 0, 0, 1];
                var e = new game.PIXI.ColorMatrixFilter;
                e.matrix = this.colorMatrix,
                this.ruta.contenedorMaestro.filters = [e],
                this.ponerBrillo = !0
            } else this.mataMenu()
        },
        clickMoreGames: function(t) {
            game.audio.playSound("botonLowS"),
            this.animBder.addTo(this.moreb),
            this.animBder.position.set( - 27, -22),
            this.animBder.play("normal", 0);
            var e = Api.Branding.getLink("more_games");
            e.action()
        },
        clickMute: function(t) {
            this.animBizq.position.set(0, -23),
            this.animBizq.play("normal", 0),
            1 == this.indexMute ? (game.audio.playSound("botonLowS2"), this.indexMute = 0, this.muteb[1].visible = !1, this.muteb[0].visible = !0, this.animBizq.addTo(this.muteb[0]), this.ruta.sonido = !1, game.audio.muteMusic(), game.audio.muteSound()) : 0 == this.indexMute && (game.audio.playSound("botonLowS"), this.indexMute = 1, this.muteb[0].visible = !1, this.muteb[1].visible = !0, this.animBizq.addTo(this.muteb[1]), this.ruta.sonido = !0, game.audio.unmuteMusic(), game.audio.unmuteSound())
        },
        determinarAccion: function() {
            switch (this.accion) {
            case "empezarJuego":
                game.audio.stopMusic(),
                game.audio.setMusicVolume(1),
                this.ruta.empezarGame();
                break;
            case "shop":
                this.ruta.Shop = new game.shop(this.ruta, "gameover")
            }
        },
        update: function() {
            1 == this.ponerBrillo && (this.colorIndex = this.colorIndex + .008 * game.system.delta * 100, this.colorIndex > 1 && (this.colorIndex = 1), "empezarJuego" == this.accion && (game.audio.musicVolume < 0 && (game.audio.musicVolume = 0), 1 == this.ruta.sonido && game.audio.setMusicVolume(game.audio.musicVolume - .009)), this.colorMatrix[3] = this.colorIndex, this.colorMatrix[7] = this.colorIndex, this.colorMatrix[11] = this.colorIndex, 1 == this.colorIndex && (this.ponerBrillo = !1, this.mataMenu()))
        }
    })
}),
game.module("game.shop").body(function() {
    game.createClass("shop", {
        ruta: null,
        fondoMain: null,
        fondo: null,
        muteb: [],
        moreb: null,
        shopb: null,
        backb: null,
        animBizq: null,
        animBder: null,
        animBcenter: null,
        accion: null,
        monosb: [],
        donde: null,
        textos: [],
        compras: [],
        valores: [0, 2e3, 2e3, 2e3, 2e3, 2e3, 2e3, 2e3, 2e3, 2e3],
        retryb: null,
        moreGamesWH: null,
        init: function(t, e) {
            console.log("Class initiated - SHOP -"),
            this.ruta = t,
            this.donde = e,
            "gameover" == e && (this.retryb = this.ruta.assets.GUI[32]),
            this.moreb = this.ruta.assets.GUI[10],
            this.fondoMain = this.ruta.assets.GUI[3],
            this.fondo = this.ruta.assets.GUI[31],
            this.backb = this.ruta.assets.GUI[0],
            this.animBizq = this.ruta.assets.GUI[21],
            this.animBder = this.ruta.assets.GUI[22],
            this.animBcenter = this.ruta.assets.GUI[24],
            this.seteaVariables(),
            this.poneMenu(1)
        },
        seteaCoins: function() {
            var t;
            t = this.ruta.gameCoins < 10 ? "   " + this.ruta.gameCoins + "  ": this.ruta.gameCoins < 100 ? "  " + this.ruta.gameCoins + "   ": this.ruta.gameCoins < 1e3 ? " " + this.ruta.gameCoins + "    ": "" + this.ruta.gameCoins + "   ",
            null != this.textos[0] && this.textos[0].parent == this.fondo && this.ruta.sacaSprite(this.textos[0], this.textos[0].parent),
            this.textos[0] = new game.PIXI.Text(t, {
                font: "35px Arial",
                fill: "#FFFFFF"
            }),
            this.ruta.agregaSprite(this.textos[0], this.fondo, 1, game.system.width / 2 - this.textos[0].width / 2, 244.5, !1)
        },
        setAssets: function() {
            for (var t = 1; 10 >= t; t++) switch (t) {
            case 1:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 51, 313, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 68, 339, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 44, 280, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(78, 350, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 2:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 122, 410, !1),
                this.ruta.assets.GUI[50 + t].scale.set(1, -1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 139, 310, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 118, 269, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(149, 314, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 3:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 193, 313, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 210, 339, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 186, 280, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(220, 350, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 4:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 263, 410, !1),
                this.ruta.assets.GUI[50 + t].scale.set(1, -1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 280, 310, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 257, 269, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(290, 314, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 5:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 334, 313, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 350, 339, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 327, 280, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(360, 350, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 6:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 51, 546, !1),
                this.ruta.assets.GUI[50 + t].scale.set(1, -1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 68, 446, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 47, 408, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(78, 450, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 7:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 122, 449, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 139, 475, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 114, 415, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(149, 486, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 8:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 193, 546, !1),
                this.ruta.assets.GUI[50 + t].scale.set(1, -1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 210, 446, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 189, 408, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(220, 450, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 9:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 263, 449, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 280, 475, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 258, 415, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(290, 486, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t;
                break;
            case 10:
                this.ruta.agregaSprite(this.ruta.assets.GUI[50 + t], this.fondo, 1, 334, 546, !1),
                this.ruta.assets.GUI[50 + t].scale.set(1, -1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[10 + t], this.fondo, 1, 350, 446, !1),
                this.ruta.agregaSprite(this.ruta.assets.GUI[40 + t], this.fondo, 1, 329, 408, !1),
                this.ruta.assets.GUI[40 + t].play("stand", 0),
                this.monosb[t] = new game.Container,
                this.monosb[t].hitArea = new game.HitRectangle(360, 450, 55, 60),
                this.monosb[t].addTo(this.fondo),
                this.monosb[t].name = "" + t
            }
            for (var t = 1; 10 >= t; t++) 1 == this.compras[t - 1] ? (this.ruta.assets.GUI[40 + t].visible = !1, t - 1 == this.ruta.personajeElegido ? this.ruta.assets.GUI[50 + t].visible = !0 : this.ruta.assets.GUI[50 + t].visible = !1) : (this.ruta.assets.GUI[50 + t].visible = !1, this.ruta.assets.GUI[40 + t].visible = !0)
        },
        seteaVariables: function() {
            if (1 == this.ruta.permitirStorage) {
                this.compras[0] = 1;
                for (var t = 1; 10 > t; t++) this.compras[t] = localStorage.getItem("compras_lake_" + t),
                null == this.compras[t] || void 0 == this.compras[t] || 1 == isNaN(this.compras[t]) ? this.compras[t] = 0 : this.compras[t] = parseInt(this.compras[t])
            } else {
                this.compras[0] = 1;
                for (var t = 1; 10 > t; t++) this.compras[t] = 0
            }
        },
        sacaBrillo: function() {
            this.sacarBrillo = !0
        },
        poneMenu: function(t) {
            var e = 100 * game.system.height / 900 / 100;
            switch (this.moreGamesWH = new game.Point(this.moreb.width, this.moreb.height), t) {
            case 1:
                this.ruta.agregaSprite(this.fondoMain, this.ruta.contenedorMaestro, 1, 0, 0, !1, !0),
                this.ruta.agregaSprite(this.fondo, this.ruta.contenedorMaestro, e, game.system.width / 2 - this.fondo.width / 2 * e, 0, !1, !0),
                this.setAssets(),
                this.seteaCoins(),
                this.ruta.agregaSprite(this.moreb, this.ruta.contenedorMaestro, e, game.system.width - this.moreb.width * e, game.system.height - this.moreb.height * e, !1, !1),
                this.ruta.agregaSprite(this.backb, this.ruta.contenedorMaestro, e, 0, game.system.height - this.backb.height * e, !1, !1),
                this.ruta.creaTweenAlpha(this.fondo, 0, 1, 600, game.Tween.Easing.Sinusoidal.Out, this.poneMenu.bind(this, 2), null);
                break;
            case 2:
                this.backb.visible = !0,
                this.moreb.visible = !0,
                this.ruta.creaTweenAlpha(this.backb, 0, 1, 300, game.Tween.Easing.Sinusoidal.Out, null, null),
                this.ruta.creaTweenAlpha(this.moreb, 0, 1, 300, game.Tween.Easing.Sinusoidal.Out, this.cambiaMoreGames.bind(this), null),
                null != this.retryb && (this.ruta.agregaSprite(this.retryb, this.ruta.contenedorMaestro, e, game.system.width / 2 - this.retryb.width / 2 * e, game.system.height - 1.1 * this.retryb.height * e, !1, !0), this.ruta.creaTweenAlpha(this.retryb, 0, 1, 300, game.Tween.Easing.Sinusoidal.Out, null, null)),
                this.poneEventos(),
                null != Api && void 0 != LOGOimg && null != LOGOimg && (LOGOimg.visibility = "visible")
            }
        },
        poneEventos: function() {
            for (var t = 1; 10 >= t; t++) this.monosb[t].interactive = !0,
            this.monosb[t].click = this.monosb[t].touchstart = this.clickShop.bind(this);
            this.backb.interactive = !0,
            this.backb.click = this.backb.touchstart = this.clickBack.bind(this),
            null != this.retryb && (this.retryb.interactive = !0, this.retryb.click = this.retryb.touchstart = this.clickRetry.bind(this))
        },
        sacaEventos: function() {
            this.moreb.interactive = !1,
            this.backb.interactive = !1,
            null != this.retryb && (this.retryb.interactive = !1);
            for (var t = 1; 10 >= t; t++) this.monosb[t].interactive = !1
        },
        mataMenu: function() {
            for (var t = 0; 1 > t; t++) this.ruta.sacaSprite(this.textos[t], this.textos[t].parent);
            this.ruta.sacaSprite(this.moreb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.backb, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.fondo, this.ruta.contenedorMaestro),
            this.ruta.sacaSprite(this.fondoMain, this.ruta.contenedorMaestro),
            null != this.retryb && this.ruta.sacaSprite(this.retryb, this.ruta.contenedorMaestro),
            this.ruta.Shop = null;
            for (var t = 1; 10 >= t; t++) this.ruta.sacaSprite(this.ruta.assets.GUI[50 + t], this.fondo),
            this.ruta.sacaSprite(this.ruta.assets.GUI[10 + t], this.fondo),
            this.ruta.sacaSprite(this.ruta.assets.GUI[40 + t], this.fondo),
            this.ruta.sacaSprite(this.monosb[t], this.fondo);
            null != Api && void 0 != LOGOimg && null != LOGOimg && (LOGOimg.visibility = "hidden"),
            null != Api && void 0 != LOGOimg && null != LOGOimg && (moreGamesimg.visibility = "hidden"),
            this.determinarAccion()
        },
        clickRetry: function(t) {
            game.audio.playSound("botonLowS"),
            this.animBizq.addTo(this.backb),
            this.animBizq.position.set(0, -23),
            this.animBizq.play("normal", 0),
            this.animBcenter.anims.normal.onComplete = this.ruta.llamaAccion(30, this.terminarMenu.bind(this, "empezarJuego")),
            this.sacaEventos()
        },
        revisarCompras: function() {
            for (var t = 0; 10 > t; t++) if (0 == this.compras[t]) return 0;
            var e = {
                award: "award9"
            };
            Api.Award.submit(e)
        },
        clickShop: function(t) {
            var e = parseInt(t.target.name);
            if (1 == this.compras[e - 1]) {
                for (var i = 1; 10 >= i; i++) this.ruta.assets.GUI[50 + i].visible = !1;
                this.ruta.assets.GUI[50 + e].visible = !0,
                game.audio.playSound("elijeMonoS"),
                this.ruta.personajeElegido = e - 1,
                localStorage.setItem("personajeElegido", "" + (e - 1))
            } else if (0 == this.compras[e - 1]) if (this.ruta.gameCoins >= this.valores[e - 1]) {
                this.ruta.gameCoins = this.ruta.gameCoins - this.valores[e - 1],
                this.seteaCoins(),
                this.compras[e - 1] = 1,
                localStorage.setItem("compras_lake_" + (e - 1), "1"),
                localStorage.setItem("personajeElegido", "" + (e - 1)),
                localStorage.setItem("Coins", "" + this.ruta.gameCoins);
                for (var i = 1; 10 >= i; i++) this.ruta.assets.GUI[50 + i].visible = !1;
                this.ruta.assets.GUI[50 + e].visible = !0,
                this.ruta.assets.GUI[40 + e].visible = !0,
                this.ruta.assets.GUI[40 + e].play("anim", 0),
                this.ruta.assets.GUI[40 + e].anims.anim.onComplete = this.ruta.llamaAccion.bind(this.ruta, 30, this.finTriangulo.bind(this, e)),
                game.audio.playSound("portalS"),
                this.monosb[e].interactive = !1,
                this.ruta.personajeElegido = e - 1,
                this.revisarCompras()
            } else game.audio.playSound("noBuyS")
        },
        finTriangulo: function(t) {
            this.ruta.assets.GUI[40 + t].visible = !1,
            this.monosb[t].interactive = !0
        },
        terminarMenu: function(t) {
            this.accion = t,
            this.mataMenu()
        },
        cambiaMoreGames: function() {
            this.moreb.visible = !1,
            null != Api && void 0 != LOGOimg && null != LOGOimg && (game.device.mobile ? moreGamesimg.visibility = "visible": moreGamesimg.visibility = "visible")
        },
        clickMoreGames: function(t) {
            game.audio.playSound("botonLowS"),
            this.animBder.addTo(this.moreb),
            this.animBder.position.set( - 27, -22),
            this.animBder.play("normal", 0);
            var e = Api.Branding.getLink("more_games");
            e.action()
        },
        clickBack: function(t) {
            game.audio.playSound("botonLowS"),
            this.animBizq.addTo(this.backb),
            this.animBizq.position.set(0, -23),
            this.animBizq.play("normal", 0),
            this.animBcenter.anims.normal.onComplete = this.ruta.llamaAccion(30, this.terminarMenu.bind(this, "back")),
            this.sacaEventos()
        },
        determinarAccion: function() {
            switch (this.accion) {
            case "empezarJuego":
                this.ruta.GameOver = new game.gameover(this.ruta, "salto"),
                this.ruta.addObject(this.ruta.GameOver);
                break;
            case "back":
                "title" == this.donde ? (this.ruta.menu = new game.title(this.ruta, !1), this.ruta.addObject(this.ruta.menu)) : "gameover" == this.donde && (this.ruta.GameOver = new game.gameover(this.ruta, !1), this.ruta.addObject(this.ruta.GameOver))
            }
        },
        update: function() {}
    })
}),
game.module("game.tramos").body(function() {
    game.createClass("tramos", {
        tramo: [],
        tramosParams: [],
        init: function(t) {
            var e = 15,
            i = 11,
            s = 12,
            a = 16,
            r = 17,
            n = 18,
            o = 33,
            h = 36,
            l = 37,
            d = 19,
            u = 20,
            c = 21,
            m = 4,
            p = 5,
            g = 13,
            f = 14,
            v = 6,
            x = 7,
            y = 39,
            b = 40,
            w = 8,
            S = 10,
            A = 9,
            P = 31,
            T = 32,
            C = "E",
            M = "S",
            G = "J",
            E = 1;
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, a, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            E = 2,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, h, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, A, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, d, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, a, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, u, 1, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0], [d, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, P, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][27] = new Array,
            this.tramosParams[E][27][6] = new Array,
            this.tramosParams[E][27][6][0] = [new game.Point(0, 11), null, new game.Point(101, 5)],
            this.tramosParams[E][52] = new Array,
            this.tramosParams[E][52][11] = new Array,
            this.tramosParams[E][52][11][0] = [new game.Point(7, -2), new game.Point(69, 2)],
            this.tramosParams[E][52][11][1] = [new game.Point(7, 2), new game.Point(69, -2)],
            E = 3,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, h, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, T, 0, 0, d, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, w, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, h, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, w, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][80] = new Array,
            this.tramosParams[E][80][11] = new Array,
            this.tramosParams[E][80][11][0] = [new game.Point(7, -2), new game.Point(28, 2), new game.Point(35, 0)],
            this.tramosParams[E][80][11][1] = [new game.Point(7, 2), new game.Point(28, -2)],
            E = 4,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, w, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][26] = new Array,
            this.tramosParams[E][26][11] = new Array,
            this.tramosParams[E][26][11][0] = [new game.Point(2, -2), new game.Point(48, 2), new game.Point(50, 0)],
            this.tramosParams[E][26][11][1] = [new game.Point( - 2, 2), new game.Point(52, -2)],
            E = 5,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, s, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, f], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, w, 0, 0, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, S, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, d, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][20] = new Array,
            this.tramosParams[E][20][11] = new Array,
            this.tramosParams[E][20][11][0] = [new game.Point(16, 0), new game.Point(83, 0), new game.Point(99, 0)],
            this.tramosParams[E][20][11][1] = [new game.Point(16, -8), new game.Point(83, 8)],
            this.tramosParams[E][20][11][2] = [new game.Point(16, 8), new game.Point(83, -8)],
            E = 6,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 2, 0, 2, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, P, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, w, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, e, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, d, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, d, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][30] = new Array,
            this.tramosParams[E][30][1] = new Array,
            this.tramosParams[E][30][1][0] = [new game.Point(4, 3), new game.Point(71, 7), new game.Point(75, 10)],
            this.tramosParams[E][30][1][1] = [new game.Point(4, 7), new game.Point(71, 3)],
            this.tramosParams[E][30][1][2] = [new game.Point(4, 11), new game.Point(71, -1)],
            E = 7,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [g, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, S, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, e, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, A, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, w, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0], [0, 0, 1, 0, e, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, r, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, e, 0, 3, 0, 0, 0], [0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 3, 0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, d, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][33] = new Array,
            this.tramosParams[E][33][11] = new Array,
            this.tramosParams[E][33][11][0] = [new game.Point(1, -9), new game.Point(70, 9), new game.Point(71, 0)],
            this.tramosParams[E][33][11][1] = [new game.Point(1, -5), new game.Point(70, 5)],
            this.tramosParams[E][33][11][2] = [new game.Point(1, 5), new game.Point(70, -5)],
            this.tramosParams[E][33][11][3] = [new game.Point(1, 9), new game.Point(70, -9)],
            E = 8,
            this.tramo[E] = new Array([v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, n, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, r, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, A, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, w, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            E = 9,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, x], [0, 0, d, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, S, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, M, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, A, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 2, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, e, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, P, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point(3, -7), new game.Point(47, 7), new game.Point(50, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point(3, 7), null],
            this.tramosParams[E][30] = new Array,
            this.tramosParams[E][30][5] = new Array,
            this.tramosParams[E][30][5][0] = [new game.Point(3, 15), null],
            this.tramosParams[E][46] = new Array,
            this.tramosParams[E][46][7] = new Array,
            this.tramosParams[E][46][7][0] = [new game.Point(1, 13), new game.Point(17, -9)],
            E = 10,
            this.tramo[E] = new Array([v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, b], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 1, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, e, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, S, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, c, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 1, 0, 0, i, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, e, 0, 0, n, 0, r, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, w, 0, 1, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, e], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, e, 0, 0, 0, e], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][6] = new Array,
            this.tramosParams[E][6][11] = new Array,
            this.tramosParams[E][6][11][0] = [new game.Point(3, -3), new game.Point(11, 3), new game.Point(14, 0)],
            this.tramosParams[E][6][11][1] = [new game.Point(3, 3), new game.Point(11, -3)],
            this.tramosParams[E][43] = new Array,
            this.tramosParams[E][43][11] = new Array,
            this.tramosParams[E][43][11][0] = [new game.Point(3, -3), new game.Point(70, 3), new game.Point(73, 0)],
            this.tramosParams[E][43][11][1] = [new game.Point(3, 3), new game.Point(70, -3)],
            E = 11,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 1, 0, 0, 0, a, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [y, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, C, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, w, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 3, 0, 0, 0, e, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, f], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [e, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, A, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, a, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, r, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][16] = new Array,
            this.tramosParams[E][16][19] = new Array,
            this.tramosParams[E][16][19][0] = [new game.Point( - 9, -17), null, new game.Point(55, -8)],
            this.tramosParams[E][26] = new Array,
            this.tramosParams[E][26][21] = new Array,
            this.tramosParams[E][26][21][0] = [new game.Point(1, -13), new game.Point(44, 3)],
            this.tramosParams[E][26][21][1] = [new game.Point(1, -7), new game.Point(44, -3)],
            E = 12,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, l, 0, 0, 0, 0, 1, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0, 3, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, w, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, d, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 3, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, s, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, S, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, d, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, w, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, d, 0, 0, 1, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, w, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, d, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, G, 0, 0, 0, e, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point(3, -9), new game.Point(72, 9), new game.Point(75, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point(3, -5), new game.Point(72, 5)],
            this.tramosParams[E][14][11][2] = [new game.Point(3, 5), new game.Point(72, -5)],
            this.tramosParams[E][14][11][3] = [new game.Point(3, 9), new game.Point(72, -9)],
            E = 13,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, l, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 1, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, b], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, d], [0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, d, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, e, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, e, 0, 0, 0, 1, 0, 1, 0, 0, 0, d, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, S, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, e, 0, 0, 1, 0, 0, 0, e, 0], [0, e, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, w, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, e, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][8] = new Array,
            this.tramosParams[E][8][11] = new Array,
            this.tramosParams[E][8][11][0] = [new game.Point(2, -7), new game.Point(7, 7), new game.Point(9, 0)],
            this.tramosParams[E][8][11][1] = [new game.Point(2, 7), new game.Point(7, -7)],
            this.tramosParams[E][40] = new Array,
            this.tramosParams[E][40][11] = new Array,
            this.tramosParams[E][40][11][0] = [new game.Point(1, -5), null, new game.Point(79, 0)],
            this.tramosParams[E][40][11][1] = [new game.Point(1, 5), null],
            this.tramosParams[E][62] = new Array,
            this.tramosParams[E][62][6] = new Array,
            this.tramosParams[E][62][6][0] = [new game.Point(3, -3), new game.Point(54, 8)],
            this.tramosParams[E][62][6][1] = [new game.Point(3, 3), new game.Point(54, 2)],
            this.tramosParams[E][62][6][2] = [new game.Point(3, 7), new game.Point(54, -2)],
            this.tramosParams[E][62][16] = new Array,
            this.tramosParams[E][62][16][0] = [new game.Point(3, 3), new game.Point(54, -8)],
            E = 14,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, h, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, C, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, d, 0], [0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 2, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0], [2, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 2, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, G, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, f], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, c, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0], [y, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 1, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, e, 0, 0, d, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][12] = new Array,
            this.tramosParams[E][12][11] = new Array,
            this.tramosParams[E][12][11][0] = [new game.Point(3, -8), new game.Point(52, 8), new game.Point(55, 0)],
            this.tramosParams[E][12][11][1] = [new game.Point(3, -4), new game.Point(52, 4)],
            this.tramosParams[E][12][11][2] = [new game.Point(3, 4), new game.Point(52, -4)],
            this.tramosParams[E][12][11][3] = [new game.Point(3, 8), new game.Point(52, -8)],
            E = 15,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [y, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, e, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, e, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, w, 0, 0, 1, 0, 0, 0, 0, 0, e, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, S, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, w, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, u, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, o, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, d, 0, 0, 2, 0, 2, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, w, d, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point(9, 0), new game.Point(47, 0), new game.Point(56, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point(9, -7), new game.Point(47, 7)],
            this.tramosParams[E][14][11][2] = [new game.Point(9, 7), new game.Point(47, -7)],
            this.tramosParams[E][81] = new Array,
            this.tramosParams[E][81][11] = new Array,
            this.tramosParams[E][81][11][0] = [new game.Point(1, -4), null, new game.Point(33, 0)],
            this.tramosParams[E][81][11][1] = [new game.Point(1, 4), null],
            this.tramosParams[E][99] = new Array,
            this.tramosParams[E][99][7] = new Array,
            this.tramosParams[E][99][7][0] = [new game.Point(5, -2), new game.Point(10, 6), null],
            this.tramosParams[E][99][7][1] = [new game.Point(5, 2), new game.Point(10, 2)],
            this.tramosParams[E][99][7][2] = [new game.Point(5, 6), new game.Point(10, -2)],
            this.tramosParams[E][99][15] = new Array,
            this.tramosParams[E][99][15][0] = [new game.Point(5, 2), new game.Point(10, -6), null],
            E = 16,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0], [0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, r, 0, 0], [0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, f], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, e, 0, 1, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, S, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, w, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point(1, -6), new game.Point(61, 6), new game.Point(62, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point(1, 8), new game.Point(61, -8)],
            E = 17,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, i, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, M, 0, 0, 0], [0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, M, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0], [0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, S, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, S, 0], [y, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, S, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, A, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, a, 0, d, 0, 0], [0, d, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, n, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][12] = new Array,
            this.tramosParams[E][12][11] = new Array,
            this.tramosParams[E][12][11][0] = [new game.Point(2, -6), new game.Point(16, 0), new game.Point(18, -6)],
            this.tramosParams[E][12][11][1] = [new game.Point(1, 7), new game.Point(17, -13)],
            this.tramosParams[E][34] = new Array,
            this.tramosParams[E][34][9] = new Array,
            this.tramosParams[E][34][9][0] = [new game.Point( - 2, -8), new game.Point(44, 10), new game.Point(42, 2)],
            this.tramosParams[E][34][9][1] = [new game.Point( - 5, 11), new game.Point(47, -9)],
            E = 18,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0], [m, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, x], [0, 0, 0, n, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, e, 0, 0, P, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, l, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, r, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][28] = new Array,
            this.tramosParams[E][28][11] = new Array,
            this.tramosParams[E][28][11][0] = [new game.Point( - 18, -7), new game.Point(36, 7), new game.Point(18, 0)],
            this.tramosParams[E][28][11][1] = [new game.Point( - 14, 11), new game.Point(32, -11)],
            E = 19,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 1, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, e, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, S, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, C, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, s, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, S, 0, 0, 0, 0, 0, 0], [0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, e, 0, 0, 2, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, o, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, a, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, a, 0, 0, 0, 1, 0, 0, 0, h, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][13] = new Array,
            this.tramosParams[E][13][6] = new Array,
            this.tramosParams[E][13][6][0] = [new game.Point(6, -3), new game.Point(87, 8), new game.Point(93, 5)],
            this.tramosParams[E][13][6][1] = [new game.Point(6, 5), null],
            this.tramosParams[E][13][6][2] = [new game.Point(6, 13), new game.Point(87, -8)],
            this.tramosParams[E][38] = new Array,
            this.tramosParams[E][38][9] = new Array,
            this.tramosParams[E][38][9][0] = [new game.Point(3, 4), new game.Point(65, -2), null, !0, 4, 5],
            this.tramosParams[E][38][9][1] = [new game.Point(7, -7), new game.Point(61, 9)],
            this.tramosParams[E][38][9][2] = [new game.Point(7, 11), new game.Point(61, -9)],
            E = 20,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, P, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, d, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0], [0, 0, 0, d, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 1, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, S, 0, 0], [0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 1, 0, d, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, a, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 1, 0, 0, 0, w, 0, 0, 0, 0, 0], [0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 1, 0, 0, S, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, a, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, x], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, a, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, r, 0, 0, 0, 3, 0, 0, 0, w, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, i, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, e, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][42] = new Array,
            this.tramosParams[E][42][11] = new Array,
            this.tramosParams[E][42][11][0] = [new game.Point( - 14, -5), new game.Point(39, 5), new game.Point(25, 0)],
            this.tramosParams[E][42][11][1] = [new game.Point( - 14, 5), new game.Point(39, -5)],
            this.tramosParams[E][42][11][2] = [new game.Point( - 2, -10), new game.Point(27, 10)],
            this.tramosParams[E][42][11][3] = [new game.Point( - 2, 10), new game.Point(27, -10)],
            this.tramosParams[E][82] = new Array,
            this.tramosParams[E][82][11] = new Array,
            this.tramosParams[E][82][11][0] = [new game.Point( - 10, -7), new game.Point(30, 7), new game.Point(20, 0)],
            this.tramosParams[E][82][11][1] = [new game.Point( - 15, 8), new game.Point(35, -8)],
            E = 21,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, S, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, i, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, i, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, T, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, o, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, M, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, M, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0], [0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, G, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][102] = new Array,
            this.tramosParams[E][102][7] = new Array,
            this.tramosParams[E][102][7][0] = [new game.Point(0, 11), null, new game.Point(57, 4)],
            this.tramosParams[E][112] = new Array,
            this.tramosParams[E][112][8] = new Array,
            this.tramosParams[E][112][8][0] = [new game.Point(0, 10), null],
            this.tramosParams[E][121] = new Array,
            this.tramosParams[E][121][9] = new Array,
            this.tramosParams[E][121][9][0] = [new game.Point(10, -8), new game.Point(28, 10)],
            this.tramosParams[E][121][9][1] = [new game.Point(10, -5), new game.Point(28, 7)],
            this.tramosParams[E][121][9][2] = [new game.Point(10, 9), new game.Point(28, -7)],
            this.tramosParams[E][121][9][3] = [new game.Point(10, 12), new game.Point(28, -10)],
            this.tramosParams[E][190] = new Array,
            this.tramosParams[E][190][12] = new Array,
            this.tramosParams[E][190][12][0] = [new game.Point(8, -11), new game.Point(30, 10), new game.Point(38, -1)],
            this.tramosParams[E][190][12][1] = [new game.Point(8, 9), new game.Point(30, -10)],
            E = 22,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, f], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, C, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 1, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][12] = new Array,
            this.tramosParams[E][12][11] = new Array,
            this.tramosParams[E][12][11][0] = [new game.Point(0, -4), new game.Point(26, 4), new game.Point(26, 0)],
            this.tramosParams[E][12][11][1] = [new game.Point(0, 4), new game.Point(26, -4)],
            E = 23,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 3, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, d, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, e], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, d, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, S, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, G, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, o, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 1, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 3, 0, 0, 0, 3, 0, d, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, a, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, e, 0, 1, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, d, 0, 0, 0, 0, 0, w, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point( - 6, -9), new game.Point(43, 9), new game.Point(37, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point( - 6, -5), new game.Point(43, 5)],
            this.tramosParams[E][14][11][2] = [new game.Point( - 6, 9), new game.Point(43, -9)],
            this.tramosParams[E][14][11][3] = [new game.Point( - 6, 5), new game.Point(43, -5)],
            E = 24,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, w, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, d, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, e, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, s, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, d, 0, 0, 0, 1, 0, 1, 0, 0, 0, d, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, e, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 1, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, d, 0, 1, 0, 1, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, u, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, a, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, i, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 1, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, h, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 1, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point(1, -4), null, new game.Point(75, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point(1, 4), null],
            this.tramosParams[E][34] = new Array,
            this.tramosParams[E][34][7] = new Array,
            this.tramosParams[E][34][7][0] = [new game.Point(5, -2), new game.Point(50, 6)],
            this.tramosParams[E][34][7][1] = [new game.Point(5, 2), new game.Point(50, 2)],
            this.tramosParams[E][34][7][2] = [new game.Point(5, 6), new game.Point(50, -2)],
            this.tramosParams[E][34][15] = new Array,
            this.tramosParams[E][34][15][0] = [new game.Point(5, 2), new game.Point(50, -6)],
            E = 25,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, e, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, C, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, S, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, f], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [y, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, A, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point( - 5, -4), new game.Point(19, 4), new game.Point(14, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point( - 5, 4), new game.Point(19, -4)],
            this.tramosParams[E][47] = new Array,
            this.tramosParams[E][47][19] = new Array,
            this.tramosParams[E][47][19][0] = [new game.Point(1, -16), null, new game.Point(43, -8)],
            this.tramosParams[E][61] = new Array,
            this.tramosParams[E][61][16] = new Array,
            this.tramosParams[E][61][16][0] = [new game.Point(1, -13), null],
            this.tramosParams[E][74] = new Array,
            this.tramosParams[E][74][15] = new Array,
            this.tramosParams[E][74][15][0] = [new game.Point(1, -12), new game.Point(15, 8), null],
            this.tramosParams[E][74][15][1] = [new game.Point(2, -5), new game.Point(13, 1), null],
            E = 26,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, a, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0], [0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, r, 0, e, 0, 0, 1, 0, 0, 0, e, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 1, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, P, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, e, 0, p], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, s, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, a, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, r, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, e, 0, 0, e, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, w, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, e, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point(1, -8), new game.Point(8, 8), new game.Point(9, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point(1, 8), new game.Point(8, -8)],
            this.tramosParams[E][18] = new Array,
            this.tramosParams[E][18][11] = new Array,
            this.tramosParams[E][18][11][0] = [new game.Point(58, 0)],
            this.tramosParams[E][68] = new Array,
            this.tramosParams[E][68][11] = new Array,
            this.tramosParams[E][68][11][0] = [new game.Point(2, -4), new game.Point(49, 4), new game.Point(51, 0)],
            this.tramosParams[E][68][11][1] = [new game.Point(2, 4), new game.Point(49, -4)],
            E = 27,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, n, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, M, 0, 0, d, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, l, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, d, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, a, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, n, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, S, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, w, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, T, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][17] = new Array,
            this.tramosParams[E][17][10] = new Array,
            this.tramosParams[E][17][10][0] = [new game.Point(1, -5), new game.Point(43, 11), new game.Point(44, 6)],
            this.tramosParams[E][17][10][1] = [new game.Point(1, 5), new game.Point(43, 1)],
            E = 28,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, b], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, d, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, r, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, d, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0], [0, 0, 0, 0, 0, P, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][17] = new Array,
            this.tramosParams[E][17][18] = new Array,
            this.tramosParams[E][17][18][0] = [new game.Point(1, -14), new game.Point(19, 7), new game.Point(21, -7)],
            this.tramosParams[E][17][18][1] = [new game.Point(1, -8), new game.Point(19, 1)],
            E = 29,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, b], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, C, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0], [0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0], [0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, S, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [e, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, d, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, h, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, s, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, S, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, e, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, h, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 3, 0, 3, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 1, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point( - 3, -4), new game.Point(59, 4), new game.Point(56, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point( - 3, 4), new game.Point(59, -4)],
            E = 30,
            this.tramo[E] = new Array([e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, a, 0, 0, e, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, i, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, C, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, w, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, n, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, P, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, e, 0, 0], [y, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, w, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, G, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, d, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][15] = new Array,
            this.tramosParams[E][15][4] = new Array,
            this.tramosParams[E][15][4][0] = [new game.Point(1, 14), null, new game.Point(56, 7)],
            this.tramosParams[E][46] = new Array,
            this.tramosParams[E][46][11] = new Array,
            this.tramosParams[E][46][11][0] = [new game.Point(1, -4), new game.Point(24, 4)],
            this.tramosParams[E][46][11][1] = [new game.Point(1, 4), new game.Point(24, -4)],
            E = 31,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, i, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, d, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, a, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, h, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point( - 7, -3), new game.Point(48, 3), new game.Point(41, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point( - 7, 3), new game.Point(48, -3)],
            E = 32,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 1, 0, e, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, e, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, d, 0, 0, w, 0, d, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, d, 0], [0, 0, 0, 3, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 3, 0, 0, 0, 0], [e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e], [0, 0, 0, 2, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0], [0, 0, 0, 2, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, P, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, e, 0, 1, 0, e, 0, 0, 0, 0, 0, 0, 0, 1, 0, e, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0], [e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e], [0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, n, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, d, 0, 1, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, S, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, s, 0, 3, 0, 0, 0, 3, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, e, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, S, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, i, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, e, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][14] = new Array,
            this.tramosParams[E][14][11] = new Array,
            this.tramosParams[E][14][11][0] = [new game.Point( - 7, -9), new game.Point(79, 9), new game.Point(72, 0)],
            this.tramosParams[E][14][11][1] = [new game.Point( - 7, -5), new game.Point(79, 5)],
            this.tramosParams[E][14][11][2] = [new game.Point( - 7, 9), new game.Point(79, -9)],
            this.tramosParams[E][14][11][3] = [new game.Point( - 7, 5), new game.Point(79, -5)],
            E = 33,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, b], [0, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, M, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, M, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, d, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, s, 0, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, d, 0, 0, 2, 0, 0, 0, 0, 0, 0], [v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, h, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, a, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, e, w, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][19] = new Array,
            this.tramosParams[E][19][20] = new Array,
            this.tramosParams[E][19][20][0] = [new game.Point( - 7, -15), new game.Point(36, 6), new game.Point(29, -9)],
            this.tramosParams[E][19][20][1] = [new game.Point( - 3, -11), new game.Point(32, 2)],
            E = 34,
            this.tramo[E] = new Array([v, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, x], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, s, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, r, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, w, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 0, d, 0, a, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, P, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, w, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0]),
            E = 35,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, e, 0, d, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [m, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [y, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, s, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, T, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, S, 0, 0, e, 0, 0, 0, 2, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, w, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, a, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0], [0, 0, 0, 0, r, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, n, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][12] = new Array,
            this.tramosParams[E][12][11] = new Array,
            this.tramosParams[E][12][11][0] = [new game.Point(1, -6), new game.Point(6, 6), new game.Point(7, 0)],
            this.tramosParams[E][12][11][1] = [new game.Point(1, 6), new game.Point(6, -6)],
            this.tramosParams[E][44] = new Array,
            this.tramosParams[E][44][11] = new Array,
            this.tramosParams[E][44][11][0] = [new game.Point(1, -7), new game.Point(38, 7), new game.Point(39, 0)],
            this.tramosParams[E][44][11][1] = [new game.Point(1, 7), new game.Point(38, -7)],
            E = 36,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, d, 0, 0, 0, 0, e, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, M, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, M, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, C, 0, 0, 0], [g, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0], [0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, p], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0], [y, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, d, 0, 0, n, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, s, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 0, 0, 3, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [y, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, w, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, P, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, e, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, e, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, w, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][19] = new Array,
            this.tramosParams[E][19][20] = new Array,
            this.tramosParams[E][19][20][0] = [new game.Point( - 4, -12), new game.Point(54, 1), new game.Point(50, -11)],
            this.tramosParams[E][19][20][1] = [new game.Point( - 2, -14), new game.Point(52, 3)],
            this.tramosParams[E][19][20][2] = [new game.Point(0, -16), new game.Point(50, 5)],
            E = 37,
            this.tramo[E] = new Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, M, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, i, 0], [0, 0, 0, 0, 2, 0, 2, 0, 0, d, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, C, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0], [0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0], [0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [g, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, e, 0, p], [0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 1, 0, 0, e, 0, 0, C, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, M, 0, 0, 0, 0, 0, 0, S, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [e, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, e, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, e, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [e, 0, 0, 0, 0, 1, 0, d, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, S, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, h, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [d, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0], [0, 0, 0, 0, 0, 1, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, e, 0, 0, 0, 0, 0, d, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, P, 0], [0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, e, 0, 0, 0, 1, 0, 0, 0, d, 0, 0, 0, d, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, e, 0, 0, 2, 1, 2, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, G, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, l, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 3, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, d, 0, 0, 0, 0, 0, 0, d, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0]),
            this.tramosParams[E] = new Array,
            this.tramosParams[E][12] = new Array,
            this.tramosParams[E][12][11] = new Array,
            this.tramosParams[E][12][11][0] = [new game.Point( - 7, -8), null, new game.Point(64, 0)],
            this.tramosParams[E][12][11][1] = [new game.Point( - 7, -4), new game.Point(71, 4)],
            this.tramosParams[E][12][11][2] = [new game.Point( - 7, 8), null],
            this.tramosParams[E][12][11][3] = [new game.Point( - 7, 4), new game.Point(71, -4)],
            this.tramosParams[E][18] = new Array,
            this.tramosParams[E][18][11] = new Array,
            this.tramosParams[E][18][11][0] = [new game.Point(58, 0)],
            this.tramosParams[E][23] = new Array,
            this.tramosParams[E][23][11] = new Array,
            this.tramosParams[E][23][11][0] = [new game.Point(5, -3), new game.Point(48, 3), null, !0, 5],
            this.tramosParams[E][23][11][1] = [new game.Point(5, 3), new game.Point(48, -3)],
            this.tramo[0] = new Array([e, 0, 0, 0, 0, 0, 0, 0, 0, 0, u, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, a, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, n, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, d, 0, 0, 0], [0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, s, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 2, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, S, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 0], [0, 0, 0, 0, s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 0, 0, 0, 0, 0, 2, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, r, 0, 0, 0, 0, 0, 0, 3, 0, 0, i, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, n, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 2, 0, 0, 0, d, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, d, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, a, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, e, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, d, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, d, 0, 0, 0, 0, 0, 0, 0, S, 0], [0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, d, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, s, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
        },
        getTramo: function(t) {
            var e, i = this.tramo.length;
            if (null == t) {
                var s = [21, 8, 0, 3, 34, 1];
                e = Math.floor(Math.random() * s.length),
                e = s[e]
            } else for (e = Math.floor(Math.random() * i); e == t;) e = Math.floor(Math.random() * i);
            return [this.tramo[e], e, this.tramosParams[e]]
        },
        getTramoInicial: function(t) {
            var e, i = [21, 8, 0, 3, 34, 1];
            return e = Math.floor(Math.random() * i.length),
            e = i[e],
            [this.tramo[e], e, this.tramosParams[e]]
        }
    })
});
game.build = 1447957797969;